Submission #1091988

#TimeUsernameProblemLanguageResultExecution timeMemory
1091988alexddSpeedrun (RMI21_speedrun)C++17
0 / 100
53 ms1196 KiB
#include "speedrun.h" #include <bits/stdc++.h> using namespace std; vector<int> con[1005]; int parent[1005]; void pune_hint(int nod, int x, int y) { //cerr<<nod<<" "<<x<<" & "<<y<<" hint\n"; for(int i=0;i<10;i++) { if(((1<<i)&x)) setHint(nod,i+1,1); if(((1<<i)&y)) setHint(nod,i+11,1); } } void dfs(int nod, int par, int tori) { parent[nod]=par; vector<int> v; for(int adj:con[nod]) if(adj!=par) v.push_back(adj); for(int i=0;i<v.size();i++) { if(i+1 < v.size()) dfs(v[i],nod,v[i+1]); else dfs(v[i],nod,0); } if(tori==0) { if(v.empty()) pune_hint(nod,parent[par],0); else pune_hint(nod,parent[par],v[0]); } else { if(v.empty()) pune_hint(nod,tori,0); else pune_hint(nod,tori,v[0]); } } void assignHints(int subtask, int N, int A[], int B[]) { setHintLen(20); for(int i=1;i<N;i++) { con[A[i]].push_back(B[i]); con[B[i]].push_back(A[i]); } dfs(1,0,0); } int get1() { int aux=0; for(int i=0;i<10;i++) if(getHint(i+1)) aux += (1<<i); return aux; } int get2() { int aux=0; for(int i=0;i<10;i++) if(getHint(i+11)) aux += (1<<i); return aux; } int nxt[1005],down[1005]; void dfs_speedrun(int nod, int par) { //cerr<<nod<<" "<<par<<" dfs\n"; nxt[nod] = get1(); down[nod] = get2(); if(down[nod]==0)///e frunza { if(par!=0) assert(goTo(par)); return; } int c = down[nod]; while(1) { assert(goTo(c)); dfs_speedrun(c,nod); c = nxt[c]; if(c==par) break; } if(par!=0) assert(goTo(par)); } void speedrun(int subtask, int N, int start) { if(N==1) return; int cur=start; while(1) { down[cur] = get2(); if(down[cur]==0) break; assert(goTo(down[cur])); cur = down[cur]; } int p=-1; for(int i=1;i<=N;i++) { if(i!=cur && goTo(i)) { p=i; break; } } assert(p!=-1); ///suntem in p assert(goTo(cur)); int it=0; while(cur!=1) { it++; if(it==100) break; //cerr<<cur<<" "<<p<<" zzz\n"; nxt[cur] = get1(); //cerr<<cur<<" "<<nxt[cur]<<" nxt\n"; assert(goTo(p)); if(p==1) { cur=1; break; } if(nxt[cur]==0 || !goTo(nxt[cur])) { swap(cur,p); } else { cur = nxt[cur]; } //assert(goTo(nxt[cur])); } assert(cur==1); dfs_speedrun(1,0); } /** 5 1 2 2 3 3 4 3 5 4 */

Compilation message (stderr)

speedrun.cpp: In function 'void dfs(int, int, int)':
speedrun.cpp:24:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   24 |     for(int i=0;i<v.size();i++)
      |                 ~^~~~~~~~~
speedrun.cpp:26:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   26 |         if(i+1 < v.size())
      |            ~~~~^~~~~~~~~~
#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...