제출 #1243317

#제출 시각아이디문제언어결과실행 시간메모리
1243317Zbyszek99죄수들의 도전 (IOI22_prison)C++20
0 / 100
7 ms580 KiB
#include "prison.h" #include <bits/stdc++.h> #define ll long long #define ld long double #define ull unsigned long long #define ff first #define ss second #define pii pair<int,int> #define pll pair<long long, long long> #define vi vector<int> #define vl vector<long long> #define pb push_back #define rep(i, b) for(int i = 0; i < (b); ++i) #define rep2(i,a,b) for(int i = a; i <= (b); ++i) #define rep3(i,a,b,c) for(int i = a; i <= (b); i+=c) #define count_bits(x) __builtin_popcountll((x)) #define all(x) (x).begin(),(x).end() #define siz(x) (int)(x).size() #define forall(it,x) for(auto& it:(x)) using namespace std; const int INF = 1e9+50; const ll INF_L = 1e18+40; const ll MOD = 1e9+7; vi splits = {3,3,2,2,2,2,2,2,2,2,2,2}; int n; vector<pii> sp; pii nxt_lr(int l, int r, int s, int val) { sp = {}; int siz_ = (r-l+1)/splits[s]; int add_ = (r-l+1) - splits[s]*siz_; rep(i,add_) { sp.pb({l,l+siz_}); l += siz_+1; } rep(i,splits[s]-add_) { sp.pb({l,l+siz_-1}); l += siz_; } pii new_pair = {-1,-1}; forall(it,sp) { if(val >= it.ff && val <= it.ss) { new_pair = it; } } return new_pair; } int what_print(int val, int num) { int l = 1; int r = n; int cur_del = 0; rep(s,siz(splits)) { l++; r--; pii new_pair = nxt_lr(l,r,s,val); forall(it,sp) { if(val >= it.ff && val <= it.ss) { new_pair = it; } } if(cur_del+splits[s] < num) { l = new_pair.ff; r = new_pair.ss; cur_del += splits[s]; } else { int k = num-cur_del-1; if(val == 13 && num == 2) { cout << k << " " << sp[k].ff << " " << sp[k].ss << " k\n"; } if(num == 0 || (val >= sp[k].ff && val <= sp[k].ss)) { pii new_pair2; if(num != 0) { if(val == sp[k].ff) return -1; if(val == sp[k].ss) return -2; new_pair2 = nxt_lr(new_pair.ff+1,new_pair.ss-1,s+1,val); } else { new_pair2 = nxt_lr(l,r,0,val); } int beg_num = (num != 0 ? cur_del+splits[s]+1 : 1); rep(k,10) { if(new_pair2.ff == sp[k].ff) break; beg_num++; } return beg_num; } else { if(val < sp[k].ff) { return -1; } return -2; } } } } vector<vi> devise_strategy(int N) { n = N; vector<vi> ans; vi zero(n+1); zero[0] = 0; zero[1] = -1; zero[n] = -2; rep2(i,2,n-1) { zero[i] = what_print(i,0); } int cur_max = 0; rep2(i,2,n-1) cur_max = max(cur_max,zero[i]); ans.pb(zero); int cur_print = 1; while(cur_print <= cur_max) { int cur_del = 0; vi p; p.pb(1); rep(s,siz(splits)) { if(cur_del+splits[s] < cur_print) { p[0] ^= 1; break; } cur_del++; } rep2(i,1,n) { int pr = what_print(i,cur_print); if(pr != -1 && pr != -2) p.pb(pr); else { if(pr == -1) { if(p[0] == 1) pr = -2; } else { if(p[0] == 1) pr = -1; } p.pb(pr); } } ans.pb(p); rep2(i,1,n) cur_max = max(cur_max,p[i]); cur_print++; } return ans; }

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

prison.cpp: In function 'int what_print(int, int)':
prison.cpp:116:1: warning: control reaches end of non-void function [-Wreturn-type]
  116 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...