제출 #116969

#제출 시각아이디문제언어결과실행 시간메모리
116969tmwilliamlin168City (JOI17_city)C++14
100 / 100
596 ms56272 KiB
#include "Encoder.h" #include <bits/stdc++.h> using namespace std; const int mxN=2.5e5, B=1<<8; vector<int> adj[mxN]; int s[mxN], dt1, dt2; int encrange(int a, int b) { return b*(b-1)/2+a; } void dfs2(int u) { int ds=dt2++; for(int v : adj[u]) dfs2(v); Code(u, 1<<26|dt1<<15|encrange(ds, dt2)); } void dfs1(int u=0, int p=-1, int d=0) { int ds=dt1; s[u]=1; if(~p) adj[u].erase(find(adj[u].begin(), adj[u].end(), p)); for(int v : adj[u]) { dfs1(v, u, d+1); s[u]+=s[v]; } if(u&&s[u]<B) return; sort(adj[u].begin(), adj[u].end(), [](const int &a, const int &b) { return s[a]<s[b]; }); for(int i=0, cs; i<adj[u].size()&&s[adj[u][i]]<B; ++dt1) { dt2=0, cs=0; while(i<adj[u].size()&&cs+s[adj[u][i]]<B) { cs+=s[adj[u][i]]; dfs2(adj[u][i++]); } } Code(u, d<<21|encrange(ds, dt1)); } void Encode(int n, int a[], int b[]) { for(int i=0; i<n-1; ++i) { adj[a[i]].push_back(b[i]); adj[b[i]].push_back(a[i]); } dfs1(); }
#include "Device.h" #include <bits/stdc++.h> using namespace std; void InitDevice() {} array<int, 2> decrange(int x) { int l=1, r=1<<11; while(l<r) { int m=(l+r+1)/2; if(m*(m-1)/2<=x) l=m; else r=m-1; } return {x-r*(r-1)/2, r}; } int Answer(long long s, long long t) { if(s>>26&&t>>26) { if((s>>15^t>>15)&(1<<11)-1) return 2; array<int, 2> rs=decrange(s&(1<<15)-1), rt=decrange(t&(1<<15)-1); if(rs[0]<=rt[0]&&rt[0]<rs[1]) return 1; if(rt[0]<=rs[0]&&rs[0]<rt[1]) return 0; return 2; } if(s>>26) { int x=s>>15&(1<<11)-1; array<int, 2> r=decrange(t&(1<<21)-1); return r[0]<=x&&x<r[1]?0:2; } if(t>>26) { int x=t>>15&(1<<11)-1; array<int, 2> r=decrange(s&(1<<21)-1); return r[0]<=x&&x<r[1]?1:2; } int sd=s>>21, td=t>>21; array<int, 2> rs=decrange(s&(1<<21)-1), rt=decrange(t&(1<<21)-1); if(td>sd&&rs[0]<=rt[0]&&rt[0]<rs[1]) return 1; if(sd>td&&rt[0]<=rs[0]&&rs[0]<rt[1]) return 0; return 2; }

컴파일 시 표준 에러 (stderr) 메시지

Encoder.cpp: In function 'void dfs1(int, int, int)':
Encoder.cpp:34:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0, cs; i<adj[u].size()&&s[adj[u][i]]<B; ++dt1) {
                   ~^~~~~~~~~~~~~~
Encoder.cpp:36:10: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   while(i<adj[u].size()&&cs+s[adj[u][i]]<B) {
         ~^~~~~~~~~~~~~~

Device.cpp: In function 'int Answer(long long int, long long int)':
Device.cpp:21:27: warning: suggest parentheses around '-' in operand of '&' [-Wparentheses]
   if((s>>15^t>>15)&(1<<11)-1)
                    ~~~~~~~^~
Device.cpp:23:38: warning: suggest parentheses around '-' in operand of '&' [-Wparentheses]
   array<int, 2> rs=decrange(s&(1<<15)-1), rt=decrange(t&(1<<15)-1);
                               ~~~~~~~^~
Device.cpp:23:64: warning: suggest parentheses around '-' in operand of '&' [-Wparentheses]
   array<int, 2> rs=decrange(s&(1<<15)-1), rt=decrange(t&(1<<15)-1);
                                                         ~~~~~~~^~
Device.cpp:31:22: warning: suggest parentheses around '-' in operand of '&' [-Wparentheses]
   int x=s>>15&(1<<11)-1;
               ~~~~~~~^~
Device.cpp:32:37: warning: suggest parentheses around '-' in operand of '&' [-Wparentheses]
   array<int, 2> r=decrange(t&(1<<21)-1);
                              ~~~~~~~^~
Device.cpp:36:22: warning: suggest parentheses around '-' in operand of '&' [-Wparentheses]
   int x=t>>15&(1<<11)-1;
               ~~~~~~~^~
Device.cpp:37:37: warning: suggest parentheses around '-' in operand of '&' [-Wparentheses]
   array<int, 2> r=decrange(s&(1<<21)-1);
                              ~~~~~~~^~
Device.cpp:41:37: warning: suggest parentheses around '-' in operand of '&' [-Wparentheses]
  array<int, 2> rs=decrange(s&(1<<21)-1), rt=decrange(t&(1<<21)-1);
                              ~~~~~~~^~
Device.cpp:41:63: warning: suggest parentheses around '-' in operand of '&' [-Wparentheses]
  array<int, 2> rs=decrange(s&(1<<21)-1), rt=decrange(t&(1<<21)-1);
                                                        ~~~~~~~^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...