Submission #767851

#TimeUsernameProblemLanguageResultExecution timeMemory
767851minhcoolMinerals (JOI19_minerals)C++17
90 / 100
33 ms5284 KiB
//#define local #ifndef local #include "minerals.h" #endif #include<bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; using namespace std; //#define int long long #define fi first #define se second #define pb push_back #define mp make_pair typedef pair<int, int> ii; typedef pair<ii, int> iii; typedef pair<ii, ii> iiii; const int N = 3e5 + 5; const int oo = 1e18 + 7, mod = 1e9 + 7; mt19937 rng(1); int rnd(int l, int r){ int temp = rng() % (r - l + 1); return abs(temp) + l; } vector<int> fi, se; #define index indexx int index[N]; bool in[N]; bool used[N]; int total[N][17]; void Solve(int N){ int lst = 0; for(int i = 1; i <= 2 * N; i++){ int temp = Query(i); in[i] = 1; if(temp == lst) se.pb(i); else fi.pb(i); lst = temp; } for(int i = 0; i < N; i++){ int num = 0; for(int j = 0; j <= 15; j++){ if(i & (1LL << j)) num += (1LL << j); total[num][j]++; } } bool temp = 1; shuffle(se.begin(), se.end(), default_random_engine(7405)); for(int i = 0; i <= 15; i++){ int num = 0; for(int j = 0; j < fi.size(); j++){ bool temp1 = in[fi[j]], temp2 = (j & (1LL << i)); if(i == 15 && temp1) continue; if(temp1 ^ temp2){ num++; lst = Query(fi[j]); in[fi[j]] ^= 1; } } // cout << i << " " << num << "\n"; for(auto it : se){ //if(i == 14 && (used[index[it] + (1LL << 14)])) continue; if(!total[index[it]][i]){ index[it] += (1LL << i); continue; } if(!total[index[it] + (1LL << i)][i]){ continue; } int temp = Query(it); if(lst == temp) index[it] += (1LL << i); total[index[it]][i]--; //if(i == 14 && (index[it] + (1LL << 15)) >= fi.size()) used[index[it]] = 1; //in[it] ^= 1; lst = temp; } //temp ^= 1; } //for(auto it : se) cout << index[it] << " " << fi[index[it]] << "\n"; for(auto it : se) Answer(fi[index[it]], it); } #ifdef local void process(){ } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); int t; cin >> t; while(t--) process(); } #endif

Compilation message (stderr)

minerals.cpp:22:21: warning: overflow in conversion from 'double' to 'int' changes value from '1.0e+18' to '2147483647' [-Woverflow]
   22 | const int oo = 1e18 + 7, mod = 1e9 + 7;
      |                ~~~~~^~~
minerals.cpp: In function 'void Solve(int)':
minerals.cpp:62:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |   for(int j = 0; j < fi.size(); j++){
      |                  ~~^~~~~~~~~~~
minerals.cpp:58:7: warning: unused variable 'temp' [-Wunused-variable]
   58 |  bool temp = 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...