Submission #952591

#TimeUsernameProblemLanguageResultExecution timeMemory
952591UnforgettableplBali Sculptures (APIO15_sculpture)C++17
71 / 100
162 ms724 KiB
#include <bits/stdc++.h> using namespace std; #define int long long bool DP[101][101]; int DPmin[2001]; int arr[101]; int a,b,n; bool testany(int k){ for(auto&i:DP)for(auto&j:i)j=false; DP[0][0]=true; for(int j=1;j<=b;j++){ for(int i=j;i<=n;i++){ int sum = arr[i]; for(int x=i-1;x>=j-1;x--){ if((sum|k) == k and DP[x][j-1]){DP[i][j]=true;break;} sum+=arr[x]; } } } for(int i=a;i<=b;i++)if(DP[n][i])return true; return false; } bool test1(int k){ for(int&i:DPmin)i=1e17; DPmin[0]=0; for(int i=1;i<=n;i++){ int sum = arr[i]; for(int j=i-1;j>=0;j--){ if((sum|k)==k)DPmin[i]=min(DPmin[i],DPmin[j]+1); sum+=arr[j]; } } return DPmin[n]<=b; } bool test(int k){ return n<=100 ? testany(k) : test1(k); } bool check(int x){ bool works = test(x); for(int bit=36;bit;bit--)if(x&(1ll<<bit))works = works or test((x^(1ll<<bit))|((1ll<<bit)-1ll)); return works; } mt19937 RNG(123443); void tester(){ int l,t; cin >> n >> t;a=1;l=100*n; while(t--){ for(int i=1;i<=n;i++)arr[i]= RNG()%100; b = (RNG()%n)+1; int k = RNG()%l; if(testany(k)!= test1(k)){ for(int j=1;j<=n;j++)cout<<arr[j]<<' '; cout << '\n' << k << '\n'; exit(0); } } } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); // Stress test // tester(); // return 0; // Stress test cin >> n >> a >> b; for(int i=1;i<=n;i++)cin>>arr[i]; int ans = -1; for(int jump = 68719476736ll;jump;jump/=2){ if(!check(jump+ans))ans+=jump; } cout << ans+1 << '\n'; }
#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...