Submission #658889

#TimeUsernameProblemLanguageResultExecution timeMemory
658889ono_de206Longest beautiful sequence (IZhO17_subsequence)C++14
0 / 100
10 ms9300 KiB
#include<bits/stdc++.h> using namespace std; #define fast ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define in insert #define all(x) x.begin(),x.end() #define pb push_back #define eb emplace_back #define ff first #define ss second //#define int long long template<typename T> void mxx(T &a, T b){if(b>a) a=b;} template<typename T> void mnn(T &a, T b){if(b<a) a=b;} const int mxn=11,mxxa=1e5+10; int dp[1<<mxn][1<<mxn][mxn]; int cm[mxxa],dd[mxxa]; int bb[1<<mxn][1<<mxn]; int a[mxxa],k[mxxa]; signed main(){ int n; cin>>n; for(int i=1; i<=n; i++) cin>>a[i]; for(int i=1; i<=n; i++) cin>>k[i]; for(int i=0; i<(1<<10); i++){ for(int j=0; j<(1<<10); j++){ int a=(i&j); bb[i][j]=__builtin_popcount(a); } } for(int i=1; i<=n; i++){ int l=(a[i]>>10); int r=((l<<10)^a[i]); for(int j=0; j<(1<<10); j++){ int cnt=bb[l][j]; if(cnt>k[i]) continue; cnt=k[i]-cnt; int idx=dp[j][r][cnt]; if(dd[i]<dd[idx]+1){ dd[i]=dd[idx]+1; cm[i]=idx; } } for(int j=0; j<(1<<10); j++){ int cnt=bb[j][r]; int &idx=dp[l][j][cnt]; if(dd[idx]<dd[i]){ idx=i; } } } pair<int,int> mx; mx=make_pair(0,0); for(int i=1; i<=n; i++){ mxx(mx,{dd[i],i}); } vector<int> ans; int idx=mx.second; while(idx){ ans.pb(idx); idx=cm[idx]; } sort(all(ans)); cout<<(int)ans.size()<<'\n'; for(int x : ans) cout<<x<<' '; cout<<'\n'; 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...