제출 #795835

#제출 시각아이디문제언어결과실행 시간메모리
795835AntekbFlights (JOI22_flights)C++17
68 / 100
229 ms2204 KiB
#include "Ali.h" #include <string> #include <vector> #include<cassert> #include<iostream> #define pb push_back using namespace std; namespace { vector<int> dep, tab, gdzie; vector<vector<int> > E; int blo_siz=14; int blo_num=1440; int max_pot=14; string enc(int a){ string res(max_pot, '0'); for(int i=0; i<max_pot; i++){ res[i]='0'+!!(a&(1<<i)); } return res; } int dec(string s){ int res=0; for(int i=0; i<s.size(); i++){ res+=(1<<i)*(s[i]-'0'); } return res; } pair<int, int> dec2(int x){ //cerr<<x<<" "; for(int i=0; i<blo_num; i++){ if(x<blo_num-i){ //cerr<<i<<" "<<x<<"\n"; return {i, i+x}; } else x-=blo_num-i; } assert(false); } } void dfs(int v, int p){ //cerr<<v<<" "<<p<<endl; gdzie[v]=tab.size(); tab.pb(dep[v]); for(int u:E[v]){ if(u!=p){ dep[u]=dep[v]+1; dfs(u, v); tab.pb(dep[v]); } } } void Init(int n, std::vector<int> U, std::vector<int> V) { E.clear(); gdzie.clear(); dep.clear(); tab.clear(); gdzie.resize(n); dep.resize(n); E.resize(n); for(int i=0; i<n-1; i++){ //cerr<<U[i]<<" "<<V[i]<<endl; E[U[i]].pb(V[i]); E[V[i]].pb(U[i]); } dfs(0, -1); for(int i=0; i<n; i++){ SetID(i, gdzie[i]); } while(tab.size()%blo_siz){ tab.pb(tab.back()+1); } } string SendA(std::string s) { pair<int, int> x=dec2(dec(s)); int b1=x.first, b2=x.second; int mini=(1<<max_pot)-1; string res; for(int i=b1+1; i<b2; i++){ for(int j=i*blo_siz; j<(i+1)*blo_siz; j++){ mini=min(mini, tab[j]); } } res+=enc(mini); res+=enc(tab[b1*blo_siz]); for(int i=b1*blo_siz+1; i<blo_siz*(b1+1); i++){ res+='0'+char(tab[i]>tab[i-1]); } res+=enc(tab[b2*blo_siz]); for(int i=b2*blo_siz+1; i<blo_siz*(b2+1); i++){ res+='0'+char(tab[i]>tab[i-1]); } return res; }
#include "Benjamin.h" #include <string> #include <vector> #include<cassert> #include<iostream> using namespace std; namespace { int blo_siz=14; int blo_num=1440; int max_pot=14; int X, Y; string enc(int a){ string res(20, '0'); for(int i=0; i<20; i++){ res[i]='0'+!!(a&(1<<i)); } return res; } int dec(string s){ //cerr<<s<<"\n"; int res=0; for(int i=0; i<s.size(); i++){ res+=(1<<i)*(s[i]-'0'); } return res; } int enc2(int a, int b){ //cerr<<a<<" "<<b<<" "; int r=0; for(int i=0; i<a; i++){ r+=blo_num-i; } r+=b-a; //cerr<<r<<"\n"; return r; } } string SendB(int N, int _X, int _Y) { X=_X; Y=_Y; if(X>Y)swap(X, Y); return enc(enc2(X/blo_siz, Y/blo_siz)); } int Answer(string s) { int mini=dec(s.substr(0, max_pot)); vector<int> blo1(blo_siz), blo2(blo_siz); blo1[0]=dec(s.substr(max_pot, max_pot)); for(int i=1; i<blo_siz;i++){ if(s[max_pot*2-1+i]=='1')blo1[i]=blo1[i-1]+1; else blo1[i]=blo1[i-1]-1; } blo2[0]=dec(s.substr(2*max_pot+blo_siz-1, max_pot)); for(int i=1; i<blo_siz;i++){ if(s[max_pot*3+blo_siz-2+i]=='1')blo2[i]=blo2[i-1]+1; else blo2[i]=blo2[i-1]-1; } int ans=blo1[X%blo_siz]+blo2[Y%blo_siz]; if(X/blo_siz!=Y/blo_siz){ for(int i=X%blo_siz;i<blo_siz; i++){ mini=min(mini, blo1[i]); } for(int i=Y%blo_siz;i>=0; i--){ mini=min(mini, blo2[i]); } } else{ for(int i=X%blo_siz;i<=Y%blo_siz; i++){ mini=min(mini, blo1[i]); } } return ans-2*mini; }

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

Ali.cpp: In function 'int {anonymous}::dec(std::string)':
Ali.cpp:24:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   24 |  for(int i=0; i<s.size(); i++){
      |               ~^~~~~~~~~
grader_ali.cpp:10:8: warning: '{anonymous}::_randmem' defined but not used [-Wunused-variable]
   10 |   char _randmem[12379];
      |        ^~~~~~~~

Benjamin.cpp: In function 'int {anonymous}::dec(std::string)':
Benjamin.cpp:23:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   23 |  for(int i=0; i<s.size(); i++){
      |               ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...