Submission #511071

#TimeUsernameProblemLanguageResultExecution timeMemory
511071RegisterCity (JOI17_city)C++14
8 / 100
183 ms22156 KiB
#include <bits/stdc++.h> #include "Encoder.h" using namespace std; const int NN=(1<<18)+10,M=1<<8; int n,tot,dfi[NN],dfo[NN]; vector<int> e[NN]; int sz(int x) {return dfo[x]-dfi[x]+1;} int id(int x) {return (x-1)/M;} void dfs1(int x,int fa){ dfi[x]=++tot; for(int y:e[x]) if(y!=fa) dfs1(y,x); dfo[x]=tot; if(sz(x)>M){ int k=id(dfo[x]); Code(x,(1<<27)+M*(k-1)*k/2+dfi[x]); } } void dfs2(int x,int fa,int ri){ if(sz(x)>M) ri=id(dfo[x]); else{ Code(x,(ri==id(dfo[x]))<<26|dfi[x]<<8|(sz(x)-1)); } for(int y:e[x]) if(y!=fa) dfs2(y,x,ri); } void Encode(int nn,int u[],int v[]){ n=nn; for(int i=0;i+1<n;i++) e[u[i]].push_back(v[i]),e[v[i]].push_back(u[i]); dfs1(0,-1);dfs2(0,-1,0); }
#include <bits/stdc++.h> #include "Device.h" using namespace std; //const int M=256; void InitDevice(){} int idd(int x) {return (x-1)/256;} void calc(int&b,int&d,int&k,int x){ if(x>>27&1){ b=1;x-=(1<<27);k=0; int l=1,r=1000; while(l<=r){ int mid=l+r>>1; if(256*mid*(mid-1)/2<x) k=mid,l=mid+1; else r=mid-1; } d=x-256*k*(k-1)/2; }else b=0,d=(x>>8),k=x-(d<<8); } int Answer(long long x,long long y){ int s=x,t=y,bs,ds,ks,bt,dt,kt; calc(bs,ds,ks,s);calc(bt,dt,kt,t); if(bs&&bt){ if(ds<dt&&kt<=ks) return 1; else if(dt<ds&&ks<=kt) return 0; return 2; }else if(!bs&&!bt){ if(ds>>18&1) ds-=(1<<18); if(dt>>18&1) dt-=(1<<18); int rs=ds+ks,rt=dt+kt; if(ds<dt&&rt<=rs) return 1; else if(dt<ds&&rs<=rt) return 0; return 2; }else{ bool fl=1,ri=0; if(bt) swap(ds,dt),swap(ks,kt),fl=0; if(dt>>18&1) ri=1,dt-=(1<<18); if(ds>dt||ks<idd(dt+kt)) return 2; if(ks>idd(dt+kt)||ri) return fl; return 2; } }

Compilation message (stderr)

Device.cpp: In function 'void calc(int&, int&, int&, int)':
Device.cpp:12:13: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   12 |    int mid=l+r>>1;
      |            ~^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...