Submission #815900

#TimeUsernameProblemLanguageResultExecution timeMemory
815900yeysoMinerals (JOI19_minerals)C++14
31 / 100
10 ms1608 KiB
#include "minerals.h" #include <bits/stdc++.h> using namespace std; void Solve(int N) { int a = 0; int b = 0; //vector<vector<int>> res(2 * N + 1, vector<int>(15, 0)); if(N > 100){ vector<int> arr(2 * N + 1, 0); vector<int> res(2 * N + 1, 1); for(int k = 0; k <= 14; k ++){ for(int i = 0; i <= 2 * N; i ++){ if(k > 0){ if(i & (1 << k)){ if(i & (1 << (k - 1))){} else { a = Query(i); arr[i] ^= 1; } } else { if(i & (1 << (k - 1))){ a = Query(i); arr[i] ^= 1; } } } else { if(i & (1 << 0)){ a = Query(i); arr[i] ^= 1; } } //if(not i & (1 << k) and i & (1 << (k - 1))){ // a = Query(i); //} } for(int i = 1; i <= N; i ++){ //cout << arr[i]; b = Query(i); if(a == b){ // Then b is paired with something where the kth bit is 1 //res[a][k] = 1; res[i] += (1 << k); } b = Query(i); } //cout << "\n"; /*for(int i = 1; i <= 2 * N; i ++){ if(i & (1 << k)){ //a = Query(i); //arr[i] ^= 1; } }*/ } /* N queries to set up 2N queries for each one N queries to remove Repeat all log(n) times N / 2 queries to set up 4N queries for each one Repeat log(n) times = 4N * 15 */ set<pair<int, int>> ans; for(int i = 0; i < res.size() / 2 + 1; i ++){ ans.insert({min(i , res[i] -1), max(i , res[i] - 1)}); //Answer(i, res[i]); } for(auto itx = ++ans.begin(); itx != ans.end(); ++itx){ Answer((*itx).first, (*itx).second); //cout << (*itx).first << " " << (*itx).second << "\n"; } } else { vector<int> res(2 * N + 1, 1); for(int k = 0; k < 15; k ++){ for(int i = 1; i <= 2 * N; i ++){ if(i & (1 << k)){ a = Query(i); } } for(int i = 1; i <= 2 * N; i ++){ b = Query(i); if(a == b){ // Then b is paired with something where the kth bit is 1 //res[a][k] = 1; res[i] += (1 << k); } b = Query(i); } for(int i = 1; i <= 2 * N; i ++){ if(i & (1 << k)){ a = Query(i); } } } set<pair<int, int>> ans; for(int i = 0; i < res.size(); i ++){ ans.insert({min(i , res[i] -1), max(i , res[i] - 1)}); //Answer(i, res[i]); } for(auto itx = ++ans.begin(); itx != ans.end(); ++itx){ Answer((*itx).first, (*itx).second); //cout << (*itx).first << " " << (*itx).second << "\n"; } } } /* g++ -std=gnu++17 -O2 -Wall -pipe -static -o minerals grader.cpp minerals.cpp 4 1 5 2 6 3 7 4 8 */

Compilation message (stderr)

minerals.cpp: In function 'void Solve(int)':
minerals.cpp:71:22: 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 < res.size() / 2 + 1; i ++){
      |                    ~~^~~~~~~~~~~~~~~~~~~~
minerals.cpp:105:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  105 |     for(int i = 0; i < res.size(); 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...