답안 #701192

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
701192 2023-02-20T12:17:36 Z Abrar_Al_Samit 코알라 (APIO17_koala) C++17
33 / 100
53 ms 340 KB
#include "koala.h"
#include<bits/stdc++.h>

using namespace std;

int minValue(int N, int W) {
    int B[N], R[N];
    for(int i=0; i<N; ++i) {
        B[i] = R[i] = 0;
    }
    B[0] = 1;
    playRound(B, R);

    if(R[0]<=1) {
        return 0;
    }
    for(int i=1; i<N; ++i) {
        if(R[i]==0) return i;
    }
}

int maxValue(int N, int W) {
    int B[N] = {0}, R[N] = {0};

    set<int>s;
    for(int i=0; i<N; ++i) {
        s.insert(i);
    }

    while(s.size()>1) {
        int val = W / s.size();

        memset(B, 0, sizeof B);
        memset(R, 0, sizeof R);

        for(int x : s) {
            B[x] = val;
        }
        playRound(B, R);

        set<int>new_s;
        for(int i=0; i<N; ++i) if(R[i]>B[i]) {
            if(s.count(i)) new_s.insert(i);
        }
        s = new_s;
    }
    return *s.begin();    
}

int greaterValue(int N, int W) {
    int B[N] = {0}, R[N] = {0};

    int l = 1, r = 13;

    while(l<r) {
        int mid = (l+r+1)/2;

        B[0] = B[1] = mid;
        playRound(B, R);

        if(B[0]<R[0] && B[1]<R[1]) {
            l = mid;
        } else if(B[0]>=R[0] && B[1]>=R[1]) {
            r = mid-1;
        } else {
            if(R[0]>B[0]) return 0;
            return 1;            
        }
    }
}

void allValues(int N, int W, int *P) {
    int B[N] = {0}, R[N] = {0};
    if (W == 2*N) {
        vector<vector<int>>grps(14);

        for(int i=0; i<N; ++i) {
            int l = 0, r = 13;
            while(l<r) {
                int mid = (l+r+1)/2;
                B[i] = mid;
                playRound(B, R);

                if(R[i]>B[i]) {
                    l = mid;
                } else {
                    r = mid-1;
                }
                B[i] = 0;
            }
            grps[l].push_back(i);
        }

        vector<int>order;
        for(int i=0; i<14; ++i) {
            vector<int>cur;
            while(!grps[i].empty()) {
                for(int j : grps[i]) {
                    B[j] = i;
                }
                playRound(B, R);
                for(int j : grps[i]) {
                    if(R[j]>B[j]) {
                        cur.push_back(j);
                    }
                    B[j] = 0;
                }

                int x = cur.back();
                int id = -1;
                for(int j=0; j<grps[i].size(); ++j) {
                    if(grps[i][j]==x) id = j;
                }

                swap(grps[i].back(), grps[i][id]);
                grps[i].pop_back();

                if(grps[i].empty()) {
                    reverse(cur.begin(), cur.end());
                    for(int j : cur) {
                        order.push_back(j);
                    }
                }
            }
        }
        for(int i=0; i<N; ++i) {
            P[i] = order[i];
        } 
    } else {
        // TODO: Implement Subtask 5 solution here.
        // You may leave this block unmodified if you are not attempting this
        // subtask.
    }
}

Compilation message

koala.cpp: In function 'void allValues(int, int, int*)':
koala.cpp:111:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  111 |                 for(int j=0; j<grps[i].size(); ++j) {
      |                              ~^~~~~~~~~~~~~~~
koala.cpp: In function 'int minValue(int, int)':
koala.cpp:20:1: warning: control reaches end of non-void function [-Wreturn-type]
   20 | }
      | ^
koala.cpp: In function 'int greaterValue(int, int)':
koala.cpp:70:1: warning: control reaches end of non-void function [-Wreturn-type]
   70 | }
      | ^
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 208 KB Output is correct
2 Correct 4 ms 208 KB Output is correct
3 Correct 4 ms 208 KB Output is correct
4 Correct 3 ms 208 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 13 ms 320 KB Output is correct
2 Correct 12 ms 328 KB Output is correct
3 Correct 13 ms 208 KB Output is correct
4 Correct 13 ms 208 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 39 ms 336 KB Output is correct
2 Partially correct 42 ms 336 KB Output is partially correct
3 Correct 38 ms 328 KB Output is correct
4 Correct 39 ms 336 KB Output is correct
5 Partially correct 38 ms 328 KB Output is partially correct
6 Correct 38 ms 328 KB Output is correct
7 Partially correct 42 ms 208 KB Output is partially correct
8 Correct 37 ms 336 KB Output is correct
9 Correct 38 ms 336 KB Output is correct
10 Correct 53 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 21 ms 208 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 208 KB Output isn't correct
2 Halted 0 ms 0 KB -