Submission #973160

#TimeUsernameProblemLanguageResultExecution timeMemory
973160the_coding_poohMinerals (JOI19_minerals)C++14
100 / 100
42 ms4516 KiB
#include <bits/stdc++.h> using namespace std; // #define __LOCAL__ #ifdef __LOCAL__ void Solve(int N); const int SIZE = 1e3 + 5; int type[SIZE], cnt[SIZE], in_cnt[SIZE]; int ttl = 0, qcnt = 0; int Query(int i){ qcnt++; if(!cnt[type[i]]) ttl++; if(in_cnt[i]){ cnt[type[i]]--; in_cnt[i] = 0; } else if(!in_cnt[i]){ cnt[type[i]]++; in_cnt[i] = 1; } if(!cnt[type[i]]) ttl--; return ttl; } void Answer(int a, int b){ if(type[a] != type[b]) cout << a << ' ' << b << " WA\n"; } int main(){ int n; cin >> n; for (int i = 1, a, b; i <= n;i++){ cin >> a >> b; type[a] = i; type[b] = i; } Solve(n); cout << qcnt << '\n'; } #endif #ifndef __LOCAL__ #include "minerals.h" #endif #define uwu return; const double magic = exp(-1); void solve(vector<int> A, vector<int> B, bool b){ if(A.empty()) uwu if(A.size() == 1){ Answer(A[0], B[0]); uwu } int m = max((int) (b * A.size() + (1 - b * 2) * magic * A.size()), 1); vector<int> recA[2], recB[2]; for (int i = 0; i < A.size(); i++){ recA[i >= m].push_back(A[i]); } int prev; for(auto i : recA[b]){ prev = Query(i); } for(auto i : B){ if(recA[0].size() == recB[0].size()){ recB[1].push_back(i); } else if(recA[1].size() == recB[1].size()){ recB[0].push_back(i); } else{ int now = Query(i); now == prev ? recB[0].push_back(i) : recB[1].push_back(i); prev = now; } } solve(recA[0], recB[0], 1), solve(recA[1], recB[1], 0); return; } void Solve(int N){ vector<int> veca, vecb; for (int i = 1, pre = 0, tmp = 0; i <= 2 * N; i++){ tmp = Query(i); if(tmp == pre) veca.push_back(i); else vecb.push_back(i); pre = tmp; } random_shuffle(veca.begin(), veca.end()); random_shuffle(vecb.begin(), vecb.end()); solve(veca, vecb, 1); uwu }

Compilation message (stderr)

minerals.cpp: In function 'void solve(std::vector<int>, std::vector<int>, bool)':
minerals.cpp:71:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   71 |     for (int i = 0; i < A.size(); i++){
      |                     ~~^~~~~~~~~~
minerals.cpp:90:25: warning: 'prev' may be used uninitialized in this function [-Wmaybe-uninitialized]
   90 |             now == prev ? recB[0].push_back(i) : recB[1].push_back(i);
      |             ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...