Submission #1072907

#TimeUsernameProblemLanguageResultExecution timeMemory
1072907SiliconSquaredMinerals (JOI19_minerals)C++14
75 / 100
22 ms3212 KiB
#include "minerals.h" using namespace std; #include <vector> #include <iostream> int query(int x){ return Query(x+1); } int n; struct mineral{ int a,b; bool f; mineral(){a=0;b=n;f=true;} }; vector<mineral> v; vector<int> l; vector<int> r; void Solve(int N) { int a,b,c,q,x,y,z,t; n=N; v.resize(n,mineral()); b=0; for (int i=0;i<2*n;i++){ a=query(i); if (a>b){ l.push_back(i); b=a; }else{ r.push_back(i); } } t=0; for (int i=n/2;i<n;i++){c=query(l[i]);v[i].f=false;} vector<pair<int,int>> w; vector<pair<int,int>> w2; w.push_back({0,N}); while (!w.empty()){ // cout<<'\n'; // for (int i=0;i<n;i++){cout<<l[i]+1<<'\t';}cout<<'\n'; // for (int i=0;i<n;i++){cout<<v[i].f<<'\t';}cout<<'\n'; for (int i=0;i<n;i++){ if (v[i].a+1==v[i].b){continue;} q=query(r[i]); if (c!=q){ v[i].a=(v[i].a+v[i].b)/2; c=q; }else{ v[i].b=(v[i].a+v[i].b)/2; } if (v[i].a+1==v[i].b){t++;} if (t==n-1){break;} //cerr<<r[i]+1<<':'<<v[i].a<<','<<v[i].b<<';'; } if (t==n-1){break;} q=w.size(); for (int i=0;i<q;i++){ a=w[w.size()-1].first; b=w[w.size()-1].second; w.pop_back(); if (a+1==b || a==b){continue;} y=(a+b)/2; x=(a+y)/2; z=(y+b)/2; for (int j=x;j<y;j++){ c=query(l[j]); v[j].f=!v[j].f; } for (int j=y;j<z;j++){ c=query(l[j]); v[j].f=!v[j].f; } w2.push_back({a,y}); w2.push_back({y,b}); } w=w2; w2.clear(); } if (t==n-1){ vector<bool> zz; zz.resize(n,true); for (int i=0;i<n;i++){ if (v[i].a+1==v[i].b){ zz[v[i].a]=false; }else{ a=i; } } for (int i=0;i<n;i++){ if (zz[i]){v[a].a=i;} }} for (int i=0;i<n;i++){ Answer(r[i]+1,l[v[i].a]+1); } }

Compilation message (stderr)

minerals.cpp: In function 'void Solve(int)':
minerals.cpp:47:13: warning: 'c' may be used uninitialized in this function [-Wmaybe-uninitialized]
   47 |             if (c!=q){
      |             ^~
minerals.cpp:92:23: warning: 'a' may be used uninitialized in this function [-Wmaybe-uninitialized]
   92 |         if (zz[i]){v[a].a=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...