제출 #170556

#제출 시각아이디문제언어결과실행 시간메모리
170556VEGAnnBali Sculptures (APIO15_sculpture)C++14
100 / 100
89 ms760 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll PW = 43; const int N = 2010; const int oo = 2e9; int f[N][N], a[N], n, A, B, ff[N]; ll res, bad; bool ok(){ for (int i = 0; i <= n; i++) for (int j = 0; j <= B; j++) f[i][j] = 0; f[0][0] = 1; for (int j = 1; j <= B; j++) for (int i = 1; i <= n; i++) { if (!f[i - 1][j - 1]) continue; ll sum = 0; for (int ii = i; ii <= n; ii++){ sum += a[ii]; if ((sum & bad) == 0) f[ii][j] = 1; } } for (int j = A; j <= B; j++) if (f[n][j]) return 1; return 0; } bool kok(){ for (int i = 0; i <= n; i++) ff[i] = oo; ff[0] = 0; for (int i = 1; i <= n; i++) { if (ff[i - 1] == oo) continue; ll sum = 0; for (int ii = i; ii <= n; ii++){ sum += a[ii]; if ((sum & bad) == 0) ff[ii] = min(ff[ii], ff[i - 1] + 1); } } return (ff[n] <= B); } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); // freopen("in.txt","r",stdin); cin >> n >> A >> B; for (int i = 1; i <= n; i++) cin >> a[i]; res = (1ll << PW) - 1; for (ll po = PW - 1; po >= 0; po--) { bad ^= (1ll << po); if (A == 1){ if (kok()) res ^= (1ll << po); else bad ^= (1ll << po); } else { if (ok()) res ^= (1ll << po); else bad ^= (1ll << po); } } cout << res; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...