제출 #1040933

#제출 시각아이디문제언어결과실행 시간메모리
1040933MeGustaElArroz23Koala Game (APIO17_koala)C++14
29 / 100
25 ms896 KiB
#include "koala.h"

#include<bits/stdc++.h>

#define vi vector<int>
#define pb push_back

using namespace std;


int minValue(int n, int W) { //N=W
    int* A = new int[n];
    int* B = new int[n];
    for (int i=0;i<n;i++) A[i]=1;
    playRound(A,B);
    vi grandes;
    for (int i=0;i<n;i++) if (B[i]==2) grandes.pb(i);

    for (int i=0;i<n;i++) A[i]=0;
    A[grandes[0]]=2;
    A[grandes[1]]=n-2;

    playRound(A,B);
    for (int i=0;i<n;i++) if (i!=grandes[1] && B[i]==0) return i;
}

int maxValue(int n, int W) {
    int* A = new int[n];
    int* B = new int[n];

    vi isgrande(n,1);
    int grandes = n;
    while (grandes>1){
        int c=n%grandes;
        for (int i=0;i<n;i++){
            if (isgrande[i]) A[i]=n/grandes;
            else if (c){
                A[i]=1;
                c--;
            }
            else A[i]=0;
        }

        playRound(A,B);
        for (int i=0;i<n;i++) if (isgrande[i] && A[i]>=B[i]){
            grandes--;
            isgrande[i]=0;
        }
    }
    for (int i=0;i<n;i++) if (isgrande[i]) return i;
    assert(0);
}

int greaterValue(int N, int W) {
    // TODO: Implement Subtask 3 solution here.
    // You may leave this function unmodified if you are not attempting this
    // subtask.
    return 0;
}


bool cmp(int a, int b){
    if (a==b) return 0;
    int* A = new int[100];
    int* B = new int[100];

    for (int i=0;i<100;i++) A[i]=0;
    A[a]=A[b]=100;
    // cerr << "q: ";
    // for (int i=0;i<100;i++) cerr << A[i] << ' ';
    playRound(A,B);
    // cerr << endl;
    // for (int i=0;i<100;i++) cerr << B[i] << ' ';
    // cerr << endl;
    return B[a]<=100;
}

void merge(std::vector<int>& vec, int left, int mid, int right) {
    int n1 = mid - left + 1;
    int n2 = right - mid;

    // Create temporary vectors
    std::vector<int> leftVec(n1);
    std::vector<int> rightVec(n2);

    // Copy data to temporary vectors
    for (int i = 0; i < n1; ++i)
        leftVec[i] = vec[left + i];
    for (int i = 0; i < n2; ++i)
        rightVec[i] = vec[mid + 1 + i];

    // Merge the temporary vectors back into vec[left..right]
    int i = 0, j = 0, k = left;
    while (i < n1 && j < n2) {
        if (cmp(leftVec[i], rightVec[j])) {
            vec[k] = leftVec[i];
            ++i;
        } else {
            vec[k] = rightVec[j];
            ++j;
        }
        ++k;
    }

    // Copy the remaining elements of leftVec, if any
    while (i < n1) {
        vec[k] = leftVec[i];
        ++i;
        ++k;
    }

    // Copy the remaining elements of rightVec, if any
    while (j < n2) {
        vec[k] = rightVec[j];
        ++j;
        ++k;
    }
}

// Merge sort function
void mergeSort(std::vector<int>& vec, int left, int right) {
    if (left < right) {
        int mid = left + (right - left) / 2;

        // Sort first and second halves
        mergeSort(vec, left, mid);
        mergeSort(vec, mid + 1, right);

        // Merge the sorted halves
        merge(vec, left, mid, right);
    }
}

// Helper function to call mergeSort
void sortVector(std::vector<int>& vec) {
    if (!vec.empty()) {
        mergeSort(vec, 0, vec.size() - 1);
    }
}

void allValues(int n, int W, int *P) {
    if (W == 2*n) {
        vi v(n);
        for (int i=0;i<n;i++) v[i]=i;
        sortVector(v);
        for (int i=0;i<n;i++) P[v[i]]=i+1;
        return;
    } else {
        // TODO: Implement Subtask 5 solution here.
        // You may leave this block unmodified if you are not attempting this
        // subtask.
    }
}

컴파일 시 표준 에러 (stderr) 메시지

koala.cpp: In function 'int minValue(int, int)':
koala.cpp:16:8: warning: control reaches end of non-void function [-Wreturn-type]
   16 |     vi grandes;
      |        ^~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...