Submission #972350

#TimeUsernameProblemLanguageResultExecution timeMemory
972350vjudge1Koala Game (APIO17_koala)C++14
71 / 100
64 ms600 KiB
#include "koala.h" #include <bits/stdc++.h> using namespace std; int a[110], b[110]; int n; int minValue(int N, int W) { n=N; // TODO: Implement Subtask 1 solution here. // You may leave this function unmodified if you are not attempting this // subtask. a[0]=1; playRound(a, b); for (int i=1; i<N; ++i) if (b[i]==0) return i; return 0; } int maxValue(int N, int W) { n=N; // TODO: Implement Subtask 2 solution here. // You may leave this function unmodified if you are not attempting this // subtask. for (int i=0; i<N; ++i){ a[i]=1; } playRound(a, b); // for (int i=0; i<N; ++i) if (b[i]) cout << i+1 << ' '; // cout << '\n'; for (int i=0; i<N; ++i){ a[i]=(b[i]>a[i] && a[i])?2:0; } playRound(a, b); // for (int i=0; i<N; ++i) if (b[i]) cout << i+1 << ' '; // cout << '\n'; for (int i=0; i<N; ++i){ a[i]=(b[i]>a[i] && a[i])?4:0; } playRound(a, b); // for (int i=0; i<N; ++i) if (b[i]) cout << i+1 << ' '; // cout << '\n'; for (int i=0; i<N; ++i){ a[i]=(b[i]>a[i] && a[i])?11:0; } playRound(a, b); for (int i=0; i<N; ++i) if (b[i]>a[i] && a[i]) return i; // for (int i=0; i<N; ++i) if (b[i]) cout << i+1 << ' '; // cout << '\n'; return 0; } bool ans[110]; int greaterValue(int N, int W) { n=N; // TODO: Implement Subtask 3 solution here. // You may leave this function unmodified if you are not attempting this // subtask. for (int i=0; i<N; ++i){ a[i]=1; } playRound(a, b); if ((b[0]>a[0])!=(b[1]>a[1])){ if (b[0]>a[0]) return 0; return 1; } if (b[0]>a[0] && b[1]>a[1]){ for (int i=0; i<N; ++i) a[i]=(i==0 || i==1)?10:0; playRound(a, b); if (b[0]>a[0]) return 0; return 1; } // bitset<1225> bs[11]; // for (int i=0; i<=10; ++i) bs[i].reset(); // for (int v=1; v<=10; ++v){ // int cur=0; // for (int x=0; x<N; ++x) for (int y=x+1; y<N; ++y) if (x<50 && y<50){ // for (int i=0; i<N; ++i) a[i]=(i==x || i==y)?v:0; // playRound(a, b); // bs[v].set(cur++, b[x]!=b[y]); // } // } // for (int i=0; i<1024; ++i){ // bitset<1225> tot; // for (int j=0; j<10; ++j) if (i>>j&1) tot|=bs[j+1]; // if (tot.all()){ // for (int j=0; j<10; ++j) if (i>>j&1) cout << j+1 << ' '; // cout << '\n'; // } // } for (int v:{1, 3, 6}){ for (int i=0; i<N; ++i) a[i]=(i==0 || i==1)?v:0; playRound(a, b); if ((b[0]>a[0])!=(b[1]>a[1])){ if (b[0]>a[0]) return 0; return 1; } } return 0; } bool compare(int x, int y){ if (ans[x]!=ans[y]){ if (ans[x]) return 0; return 1; } if (ans[x] && ans[y]){ for (int i=0; i<n; ++i) a[i]=(i==x || i==y)?10:0; playRound(a, b); if (b[x]>a[x]) return 0; return 1; } for (int v:{1, 3, 6}){ for (int i=0; i<n; ++i) a[i]=(i==x || i==y)?v:0; playRound(a, b); if ((b[x]>a[x])!=(b[y]>a[y])){ if (b[x]>a[x]) return 0; return 1; } } return 0; } void allValues(int N, int W, int *P) { n=N; if (W == 2*N) { // TODO: Implement Subtask 4 solution here. // You may leave this block unmodified if you are not attempting this // subtask. auto comp=[&](int x, int y) -> bool { for (int i=0; i<N; ++i) a[i]=(i==x || i==y)?100:0; playRound(a, b); return (b[y]>a[y]); }; auto merge_sort=[&](auto self, vector<int> &v) -> void { int sz=(int)v.size(); if (sz<=1) return; vector<int> vl(v.begin(), v.begin()+sz/2); vector<int> vr(v.begin()+sz/2, v.end()); self(self, vl); self(self, vr); merge(vl.begin(), vl.end(), vr.begin(), vr.end(), v.begin(), comp); }; vector<int> v(N); iota(v.begin(), v.end(), 0); merge_sort(merge_sort, v); for (int i=0; i<N; ++i) P[v[i]]=i+1; } else { // TODO: Implement Subtask 5 solution here. // You may leave this block unmodified if you are not attempting this // subtask. for (int i=0; i<n; ++i){ a[i]=1; } playRound(a, b); for (int i=0; i<n; ++i) ans[i]=b[i]>a[i]; auto merge_sort=[&](auto self, vector<int> &v) -> void { int sz=(int)v.size(); if (sz<=1) return; vector<int> vl(v.begin(), v.begin()+sz/2); vector<int> vr(v.begin()+sz/2, v.end()); self(self, vl); self(self, vr); merge(vl.begin(), vl.end(), vr.begin(), vr.end(), v.begin(), compare); }; vector<int> v(N); iota(v.begin(), v.end(), 0); merge_sort(merge_sort, v); for (int i=0; i<N; ++i) P[v[i]]=i+1; } }
#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...