제출 #1060840

#제출 시각아이디문제언어결과실행 시간메모리
1060840boyliguanhan죄수들의 도전 (IOI22_prison)C++17
100 / 100
10 ms1116 KiB
#include "prison.h" #include <vector> using namespace std; vector<int>layer{3,3,3,3,3,3,2}; int blkin[5010][10],whichone[50],sum[50]; vector<int> which_to_do(int num,int n){ vector<int>res(n+1); res[0]=whichone[num]&1; int X=whichone[num]; int Y=num-sum[X-1]; if(!num){ for(int i=1;i<=n;i++) res[i]=blkin[i][X]; } else { for(int i=1;i<=n;i++) { if(!blkin[i][X-1])continue; if(blkin[i][X-1]<0) res[i]=-(-blkin[i][X-1]-1^1)-1; else if(blkin[i][X-1]!=Y) res[i]=-((blkin[i][X-1]>Y)^res[0])-1; else if(blkin[i][X]<0) res[i]=blkin[i][X]; else res[i]=blkin[i][X]+sum[X]; } } return res; } void build_blocks(int l,int r,int I){ blkin[l][I]=-(I&1)-1; blkin[r][I]=-!(I&1)-1; int sz=r-l-1; if(!sz)return; if(layer[I]==3) { int sz1=sz/3,sz2=sz1,sz3=sz1; if(sz1+sz2+sz3<sz) sz1++; if(sz1+sz2+sz3<sz) sz2++; for(int i=1;i<=sz1;i++) blkin[l+i][I]=1; for(int i=1;i<=sz2;i++) blkin[l+i+sz1][I]=2; for(int i=1;i<=sz3;i++) blkin[l+i+sz1+sz2][I]=3; build_blocks(l+1,l+sz1,I+1); build_blocks(l+sz1+1,l+sz1+sz2,I+1); build_blocks(l+sz1+sz2+1,l+sz1+sz2+sz3,I+1); } else { blkin[l+1][I]=1; blkin[l+2][I]=1; blkin[l+3][I]=2; blkin[l+4][I]=2; build_blocks(l+1,l+2,I+1); build_blocks(l+3,l+4,I+1); } } vector<vector<int>> devise_strategy(int N) { for(int i=1;i<8;i++) sum[i]=sum[i-1]+layer[i-1]; for(int i=1;i<=20;i++) whichone[i]=(i>sum[whichone[i-1]])+whichone[i-1]; build_blocks(1,5000,0); vector<vector<int>> ans; for(int i=0;i<=20;i++) ans.push_back(which_to_do(i,N)); return ans; }

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

prison.cpp: In function 'std::vector<int> which_to_do(int, int)':
prison.cpp:19:40: warning: suggest parentheses around arithmetic in operand of '^' [-Wparentheses]
   19 |                 res[i]=-(-blkin[i][X-1]-1^1)-1;
      |                          ~~~~~~~~~~~~~~^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...