Submission #222686

#TimeUsernameProblemLanguageResultExecution timeMemory
222686quocnguyen1012Chameleon's Love (JOI20_chameleon)C++14
4 / 100
30 ms512 KiB
#ifndef LOCAL #include "chameleon.h" #endif // LOCAL #ifdef LOCAL #include<bits/stdc++.h> namespace { using std::exit; using std::fprintf; using std::printf; using std::scanf; constexpr int Q_MAX = 20'000; constexpr int N_MAX = 500; int N; int Y[N_MAX * 2 + 1], C[N_MAX * 2 + 1], L[N_MAX * 2 + 1]; int query_count = 0; int answer_count = 0; bool finishes[N_MAX * 2 + 1]; void WrongAnswer(int code) { printf("Wrong Answer [%d]\n", code); exit(0); } } // namespace int Query(const std::vector<int> &p) { if (++query_count > Q_MAX) WrongAnswer(3); bool presents[N_MAX * 2 + 1]; for (int i = 1; i <= N * 2; ++i) presents[i] = false; for (const int k : p) { if (k <= 0 || k > N * 2) WrongAnswer(1); if (presents[k]) WrongAnswer(2); presents[k] = true; } bool colors[N_MAX + 1]; for (int j = 1; j <= N; ++j) colors[j] = false; int color_count = 0; for (int i = 1; i <= N * 2; ++i) { if (!presents[i]) continue; const int color = presents[L[i]] ? C[L[i]] : C[i]; if (!colors[color]) { ++color_count; colors[color] = true; } } return color_count; } void Answer(int a, int b) { ++answer_count; if (a <= 0 || a > N * 2) WrongAnswer(4); if (b <= 0 || b > N * 2) WrongAnswer(4); if (finishes[a]) WrongAnswer(5); finishes[a] = true; if (finishes[b]) WrongAnswer(5); finishes[b] = true; if (C[a] != C[b]) WrongAnswer(6); } #endif //LOCAL #include <bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #define eb emplace_back using namespace std; typedef long long ll; typedef pair<int, int> ii; void Solve(int N) { vector<int> v; for(int i = 1; i <= 2 * N; ++i){ int l = 0, r = v.size() - 1, mid; while(l <= r){ mid = (l + r) / 2; vector<int> tmp; for(int j = 0; j <= mid; ++j){ tmp.eb(v[j]); } tmp.eb(i); if(Query(tmp) == tmp.size()){ l = mid + 1; } else{ r = mid - 1; } } if(l >= v.size()){ v.eb(i); } else{ Answer(v[l], i); //cerr << v[l] << ' ' << i << '\n'; swap(v[l], v.back()); v.pop_back(); } } } #ifdef LOCAL int main() { #ifdef LOCAL freopen("A.INP", "r", stdin); freopen("A.OUT", "w", stdout); #endif // LOCAL if (scanf("%d", &N) != 1) { fprintf(stderr, "Error while reading input.\n"); exit(1); } for (int i = 1; i <= N * 2; ++i) { if (scanf("%d", &Y[i]) != 1) { fprintf(stderr, "Error while reading input.\n"); exit(1); } } for (int i = 1; i <= N * 2; ++i) { if (scanf("%d", &C[i]) != 1) { fprintf(stderr, "Error while reading input.\n"); exit(1); } } for (int i = 1; i <= N * 2; ++i) { if (scanf("%d", &L[i]) != 1) { fprintf(stderr, "Error while reading input.\n"); exit(1); } } for (int i = 1; i <= N * 2; ++i) finishes[i] = false; Solve(N); if (answer_count != N) WrongAnswer(7); printf("Accepted: %d\n", query_count); return 0; } #endif // LOCAL

Compilation message (stderr)

chameleon.cpp: In function 'void Solve(int)':
chameleon.cpp:90:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       if(Query(tmp) == tmp.size()){
          ~~~~~~~~~~~^~~~~~~~~~~~~
chameleon.cpp:97:10: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(l >= v.size()){
        ~~^~~~~~~~~~~
#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...