제출 #1148898

#제출 시각아이디문제언어결과실행 시간메모리
1148898yeysoMinerals (JOI19_minerals)C++20
40 / 100
10 ms1860 KiB
#include "minerals.h" #include <bits/stdc++.h> using namespace std; void Solve(int N) { int cur = 0; int prev = 0; int x = log2(N) + 1; //cout << x << " "; vector<int> binary(N + 1, 0); vector<int> firstgroup; vector<int> secondgroup; for(int i = 1; i < 2 * N + 1; i ++){ cur = Query(i); if(cur == prev){ firstgroup.push_back(i); } else { secondgroup.push_back(i); } prev = cur; } for(int i = 1; i < 2 * N + 1; i ++){ cur = Query(i); } /*for(int i = 0; i < firstgroup.size(); i ++){ cout << firstgroup[i] << " "; } cout << "\n"; for(int i = 0; i < secondgroup.size(); i ++){ cout << secondgroup[i] << " "; } cout << "\n\n";*/ for(int bit = 0; bit < x; bit ++){ for(int i = 0; i < N; i ++){ if(i & (1 << bit)){ prev = Query(firstgroup[i]); //cout << firstgroup[i] << " "; } else { //cout << 0 << " "; } } //cout << "\n"; for(int i = 0; i < N; i ++){ cur = Query(secondgroup[i]); if(cur == prev){ binary[i] += (1 << bit); } prev = Query(secondgroup[i]); } for(int i = 0; i < N; i ++){ if(i & (1 << bit)){ prev = Query(firstgroup[i]); } } } for(int i = 0; i < N; i ++){ //cout << secondgroup[i] << " : " << firstgroup[binary[i]] << "\n"; Answer(secondgroup[i], firstgroup[binary[i]]); } } /* g++ -std=gnu++17 -O2 -o minerals grader.cpp minerals.cpp 10 1 7 2 19 3 9 4 12 5 6 8 13 10 11 14 20 15 17 16 18 */ /*void Solve(int N) { int cur = 0; int prev = 0; int x = log2(2 * N) + 1; vector<int> binary(2 * N + 1, 0); vector<int> a(2 * N + 1, 0); for(int bit = 0; bit < x; bit ++){ // 15,000 changes per pass on average for(int i = 1; i <= 2 * N; i ++){ int state = i & (1 << bit); int on = 0; if(state) on = 1; if(on != a[i]){ prev = Query(i); a[i] ^= 1; } //cout << a[i] << " "; } //cout << "\n"; for(int i = 1; i <= 2 * N; i ++){ if(i & (1 << bit)){ cur = Query(i); if(cur == prev){ binary[i] += (1 << bit); } prev = Query(i); } } // Bits that were originally off // for(int i = 1; i <= 2 * N; i ++){ if(!(i & (1 << bit))){ cur = Query(i); a[i] ^= 1; if(cur == prev){ binary[i] += (1 << bit); } else { prev = Query(i); a[i] ^= 1; } } } } for(int i = 1; i <= 2 * N; i ++){ if(i < binary[i]){ //cout << i << " : " << binary[i] << "\n"; Answer(i, binary[i]); } } }*/ /* g++ -std=gnu++17 -O2 -o minerals grader.cpp minerals.cpp 10 1 7 2 19 3 9 4 12 5 6 8 13 10 11 14 20 15 17 16 18 7 3 14 1 12 5 11 7 13 4 10 2 16 6 15 10 1 17 2 14 3 12 4 19 5 13 6 15 7 11 8 16 9 18 10 20 */
#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...