Submission #863291

#TimeUsernameProblemLanguageResultExecution timeMemory
863291willychanFlights (JOI22_flights)C++17
35 / 100
183 ms4196 KiB
#include "Ali.h" #include<iostream> #include <string> #include <vector> #include<cassert> #include<queue> #include<algorithm> namespace { std::vector<std::vector<int> > side; int rN = 0; std::vector<int> p[20]; std::vector<int> dep; std::vector<int> dfn; std::vector<int> dfn2ind; int t = 0; std::vector<int> mt2t; std::vector<int> dfmt; int mt = 0; void dfs(int cur){ dfn[cur]=t++; dfmt[cur]=mt++; mt2t.push_back(dfn[cur]); dfn2ind.push_back(cur); for(int i : side[cur]) { if(!dep[i]){ p[0][i]= cur; dep[i]=dep[cur]+1; dfs(i); } } t++; dfn2ind.push_back(p[0][cur]); } int dis(int a,int b){ if(a==b) return 0; if(dep[a]>dep[b]) std::swap(a,b); int oga = a; int ogb = b; for(int i=19;i>=0;i--){ if(dep[p[i][b]]>=dep[a]) b=p[i][b]; } if(a==b) return dep[ogb]-dep[oga]; for(int i=19;i>=0;i--){ if(p[i][a]!=p[i][b]){ a = p[i][a]; b = p[i][b]; } } b = p[0][b]; a = p[0][a]; int c = b; return dep[oga]+dep[ogb]-2*dep[c]; } std::string dtb(int x){ std::string s; for(int i=0;i<14;i++){ if((x>>i)&1) s+='1'; else s+='0'; } return s; } } void Init(int N, std::vector<int> U, std::vector<int> V) { rN=N; side.resize(N); dep.resize(N); dfn.resize(N); dfmt.resize(N); t=0; mt=0; dfn2ind.clear(); mt2t.clear(); for(int i=0;i<20;i++) p[i].resize(N); for(int i=0;i<N;i++){ dfn[i]=0; dep[i]=0; dfmt[i]=0; side[i].clear(); for(int k=0;k<20;k++) p[k][i]=0; } for(int i=0;i<N-1;i++){ side[U[i]].push_back(V[i]); side[V[i]].push_back(U[i]); } dep[0]=1; dfs(0); for(int j=1;j<20;j++) { for(int i=0;i<N;i++) p[j][i] = p[j-1][p[j-1][i]]; } /* for(int i=0;i<N;i++) std::cout<<dfmt[i]<<" "; std::cout<<'\n'; for(int i=0;i<N;i++) std::cout<<dfn2ind[mt2t[dfmt[i]]]<<" "; std::cout<<'\n'; */ for(int i=0;i<N;i++) SetID(i,dfmt[i]); } std::string SendA(std::string S) { //std::cout<<"ans:"<<dep[2015]<<" "<<dep[3582]<<"\n"; std::string re; int xm = 0; int ym = 0; for(int i=0;i<10;i++){ if(S[i]=='1') xm+=(1<<i); if(S[i+10]=='1') ym+=(1<<i); } std::vector<int> pospos; for(int i=0;i<10;i++){ if(xm+(1024)*i<rN) re+=dtb(dep[dfn2ind[mt2t[xm+(1024)*i]]]); else re+=dtb(0); if(xm+(1024)*i<rN) pospos.push_back(mt2t[xm+(1024)*i]); // if(xm+(1024)*i<rN) std::cout<<xm+(1024)*i<<"->"<<dfn2ind[mt2t[xm+(1024)*i]]<<":"<<dep[dfn2ind[mt2t[xm+(1024)*i]]]<<" "; } // std::cout<<"\n"; for(int i=0;i<10;i++){ if(ym+(1024)*i<rN) re+=dtb(dep[dfn2ind[mt2t[ym+(1024)*i]]]); else re+=dtb(0); if(ym+(1024)*i<rN) pospos.push_back(mt2t[ym+(1024)*i]); // if(ym+(1024)*i<rN) std::cout<<dfn2ind[mt2t[ym+(1024)*i]]<<":"<<dep[dfn2ind[mt2t[ym+(1024)*i]]]<<" "; } // std::cout<<"\n"; std::sort(pospos.begin(),pospos.end()); //for(auto i : dfn) std::cout<<i<<" "; //std::cout<<"\n"; //for(auto i : dfn2ind) std::cout<<i<<" "; //std::cout<<std::endl<<"pospos:"; //for(auto i : pospos) std::cout<<i<<" "; //std::cout<<"\n"; for(int i=0;i<pospos.size()-1;i++){ int minn = 1e9; for(int l=pospos[i];l<=pospos[i+1];l++) { minn = std::min(minn,dep[dfn2ind[l]]); } re+=dtb(minn); } return re; }
#include "Benjamin.h" #include <string> #include <vector> #include<iostream> namespace { int x; int y; int n; } std::string SendB(int N, int X, int Y) { n = N; x= X; y = Y; int xm = X%1024; int ym = Y%1024; std::string re; for(int i=0;i<10;i++){ if(xm&1) re.push_back('1'); else re.push_back('0'); xm>>=1; } for(int i=0;i<10;i++){ if(ym&1) re.push_back('1'); else re.push_back('0'); ym>>=1; } return re; } int Answer(std::string T) { // std::cout<<T<<std::endl; // if(x>y) std::swap(x,y); // std::cout<<x<<"this"<<y<<"\n"; int depx = 0; int depy = 0; for(int i=0;i<14;i++){ if(T[14*(x/1024)+i]=='1') depx+=(1<<i); if(T[140+14*(y/1024)+i]=='1') depy+=(1<<i); } //std::cout<<depx<<" && "<<depy<<std::endl; if(x%1024>y%1024) std::swap(x,y); int l = (2*(x/1024)); int r = (2*(y/1024))+1; //std::cout<<l<<" "<<r<<std::endl; if(l>r) std::swap(l,r); int minn = 1e9; for(int i=l;i<r;i++){ int dd = 0; for(int p=0;p<14;p++){ if(T[14*(20+i)+p]=='1') dd+=(1<<p); } //std::cout<<dd<<"->"; minn = std::min(dd,minn); } // std::cout<<"\n"; // std::cout<<depx<<" "<<depy<<"\n"; return depx+depy-2*minn; }

Compilation message (stderr)

Ali.cpp: In function 'std::string SendA(std::string)':
Ali.cpp:132:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  132 |  for(int i=0;i<pospos.size()-1;i++){
      |              ~^~~~~~~~~~~~~~~~
Ali.cpp: At global scope:
Ali.cpp:34:5: warning: 'int {anonymous}::dis(int, int)' defined but not used [-Wunused-function]
   34 | int dis(int a,int b){
      |     ^~~
grader_ali.cpp:10:8: warning: '{anonymous}::_randmem' defined but not used [-Wunused-variable]
   10 |   char _randmem[12379];
      |        ^~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...