Submission #1075340

# Submission time Handle Problem Language Result Execution time Memory
1075340 2024-08-26T03:14:56 Z Cyanberry Koala Game (APIO17_koala) C++14
11 / 100
77 ms 448 KB
#include <bits/stdc++.h>
using namespace std;

#include "koala.h"

int perm[] = {5, 3, 2, 1, 6, 4};

int minValue(int N, int W) {
    int play[100], result[100];
    for (int i = 0; i<100; ++i) {
        play[i] = 0;
    }
    play[0] = 1;
    playRound(play, result);
    for (int i = 0; i < 100; ++i) {
        if (result[i] <= play[i]) {
            return i;
        }
    }
    return 0;
}

int maxValue(int N, int W) {
    int play[N], result[N];
    for (int i = 0; i < N; ++i) {
        play[i] = 1;
    }
    playRound(play, result);
    int eep = 100;
    while (eep > 1)
    {
        eep = 0;
        for (int i = 0; i < N; ++i) {
            if (result[i] > 1) {
                ++play[i];
                ++eep;
            } else {
                play[i] = 0;
            }
        }
        playRound(play, result);
    }
    for (int i = 0; i < N; ++i) {
        if (play[i] > 0) {
            return i;
        }
    }
    return 0;
}

int greaterValue(int N, int W) {
    int play[N], result[N];
    for (int i = 0; i < N; ++i) {
        play[i] = 0;
    }
    play[0] = 4;
    play[1] = 4;
    playRound(play, result);
    if (result[0] != result[1]) {
        return result[1] > result[0];
    }
    if (result[0] == 0) {
        play[0] = 2;
        play[1] = 2;
        playRound(play, result);
        if (result[0] != result[1]) {
            return result[1] > result[0];
        }
        play[0] = 1;
        play[1] = 1;
        playRound(play, result);
        if (result[0] != result[1]) {
            return result[1] > result[0];
        }
    } else {
        play[0] = 8;
        play[1] = 8;
        if (result[0] != result[1]) {
            return result[1] > result[0];
        }
        play[0] = 6;
        play[1] = 6;
        if (result[0] != result[1]) {
            return result[1] > result[0];
        }
    }
    
    return 2;
}

void allValues(int N, int W, int *P) {
    if (W == 2*N) {
        // TODO: Implement Subtask 4 solution here.
        // You may leave this block unmodified if you are not attempting this
        // subtask.
    } else {
        vector<bool> done(N, false);
        int playFrom = 1;
        int play[N], result[N], comp[N];
        for (int i = 0; i<N; ++i) {
            play[i] = 1;
        }
        for (int i = 0; i < N; ++i) {
            P[i] = 0;
        }
        playRound(play, result);
        bool isUpper[N];
        vector<int> upper, lower;
        for (int i = 0; i < N; ++i) {
            if (result[i] < play[i]) {
                isUpper[i] = false;
                lower.push_back(i);
            } else {
                isUpper[i] = true;
                upper.push_back(i);
            }
        }
        int lowerIndex = 1, upperIndex = N/2 + 1;
        for (int i = 0; i<N; ++i) {
            play[i] = 0;
        }
        play[upper[0]] = 1;
        for (int i = 0; i < N/2; ++i) {
            playRound(play, result);
            for (int j = 0; j < N; ++j) {
                comp[j] = play[j];
            }
            for (int j = 0; j < N; ++j) {
                if (P[j] > 0) continue;
                if (result[j] <= comp[j]) {
                    if (isUpper[j]) {
                        P[j] = upperIndex;
                        ++upperIndex;
                        if (play[j] > 0) {
                            if (playFrom >= upper.size()) break;
                            while(P[upper[playFrom]] > 0) {
                                ++playFrom;
                                if (playFrom >= upper.size()) break;
                                //cout<<P[upper[playFrom]]<<'\n';
                            }
                            ++play[upper[playFrom]];
                            ++playFrom;
                        }
                        play[j] = 0;
                    } else {
                        P[j] = lowerIndex;
                        ++lowerIndex;
                        if (playFrom >= upper.size()) break;
                        while(P[upper[playFrom]] > 0) {
                            ++playFrom;
                            if (playFrom >= upper.size()) break;
                            //cout<<P[upper[playFrom]]<<'\n';
                        }
                        ++play[upper[playFrom]];
                        ++playFrom;
                    }
                }
            }
        }
        while (lowerIndex < N/2)
        {
            for (int i = 0; i < N; ++i) {
                if (P[i] == 1 || P[i] == lowerIndex - 1 || (P[i] == 0 && isUpper[i])) {
                    play[i] = 0;
                } else {
                    play[i] = 1;
                }
            }
            
            playRound(play, result);
            for (int j = 0; j < N; ++j) {
                if (P[j] > 0) continue;
                if (result[j] <= comp[j]) {
                    P[j] = lowerIndex;
                    ++lowerIndex;
                    if (playFrom >= upper.size()) break;
                    while(P[upper[playFrom]] > 0) {
                        ++playFrom;
                        if (playFrom >= upper.size()) break;
                        //cout<<P[upper[playFrom]]<<'\n';
                    }
                    ++play[upper[playFrom]];
                    ++playFrom;
                }
            }
        }
        for (int i = 0; i < lower.size(); ++i) {
            if (P[lower[i]] == 0) {
                P[lower[i]] = lowerIndex;
            }
        }
        lowerIndex = N - upperIndex - 2;
        for (int i = 0; i < N; ++i) {
            play[i] = 0;
        }
        for (int i = 0; i < lowerIndex; ++i) {
            play[i] = 1;
        }
        for (int i = upperIndex; i < N; ++i) {
            play[i] = 1;
        }
        while (upperIndex < N)
        {
            playRound(play, result);
            for (int j = 0; j < N; ++j) {
                if (P[j] > 0) continue;
                if (result[j] <= comp[j]) {
                    P[j] = upperIndex;
                    ++upperIndex;
                    --lowerIndex;
                }
            }
            play[lowerIndex] = 0;
            play[upperIndex - 1] = 0;
        }
        for (int i = 0; i < N; ++i) {
            if (P[i] == 0) P[i] = N;
        }
    }
}

Compilation message

koala.cpp: In function 'void allValues(int, int, int*)':
koala.cpp:135:42: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  135 |                             if (playFrom >= upper.size()) break;
      |                                 ~~~~~~~~~^~~~~~~~~~~~~~~
koala.cpp:138:46: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  138 |                                 if (playFrom >= upper.size()) break;
      |                                     ~~~~~~~~~^~~~~~~~~~~~~~~
koala.cpp:148:38: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  148 |                         if (playFrom >= upper.size()) break;
      |                             ~~~~~~~~~^~~~~~~~~~~~~~~
koala.cpp:151:42: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  151 |                             if (playFrom >= upper.size()) break;
      |                                 ~~~~~~~~~^~~~~~~~~~~~~~~
koala.cpp:176:34: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  176 |                     if (playFrom >= upper.size()) break;
      |                         ~~~~~~~~~^~~~~~~~~~~~~~~
koala.cpp:179:38: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  179 |                         if (playFrom >= upper.size()) break;
      |                             ~~~~~~~~~^~~~~~~~~~~~~~~
koala.cpp:187:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  187 |         for (int i = 0; i < lower.size(); ++i) {
      |                         ~~^~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 3 ms 344 KB Output is correct
2 Correct 3 ms 344 KB Output is correct
3 Correct 3 ms 344 KB Output is correct
4 Correct 3 ms 448 KB Output is correct
# Verdict Execution time Memory Grader output
1 Partially correct 22 ms 344 KB Output is partially correct
2 Partially correct 20 ms 448 KB Output is partially correct
3 Partially correct 20 ms 344 KB Output is partially correct
4 Partially correct 20 ms 344 KB Output is partially correct
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 77 ms 424 KB Output isn't correct
2 Halted 0 ms 0 KB -