제출 #501778

#제출 시각아이디문제언어결과실행 시간메모리
501778Ronin13Longest beautiful sequence (IZhO17_subsequence)C++14
23 / 100
397 ms262148 KiB
#include<bits/stdc++.h> #define ll long long #define ull unsigned ll #define pll pair<ll,ll> #define pb push_back #define epb emplace_back #define f first #define s second #define pii pair<int,int> #define inf 1e9+1 #define linf 1e18+1 using namespace std; void solve(){ int n;cin>>n; if(n<=5000){ int a[n+1]; int k[n+1]; int d[n+1],d1[n+1]; for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=1;i<=n;i++){ cin>>k[i]; } for(int i=1;i<=n;i++){ d[i]=1; d1[i]=-1; } for(int i=2;i<=n;i++){ for(int j=i-1;j>=1;j--){ int x=a[i]&a[j]; if(__builtin_popcount(x)==k[i]){ if(d[j]+1>d[i]){ d[i]=d[j]+1; d1[i]=j; } } } } int mx=0,mxi; for(int i=1;i<=n;i++){ if(d[i]>mx){ mx=d[i]; mxi=i; } } vector<int>vec; while(mxi!=-1){ vec.pb(mxi); mxi=d1[mxi]; } cout<<vec.size()<<"\n"; reverse(vec.begin(),vec.end()); for(int to:vec)cout<<to<<' '; return; } int a[n+1]; int k[n+1]; int d[n+1],d1[n+1],d2[257]; for(int i=1;i<=n;i++){ cin>>a[i]; d[i]=1; d1[i]=-1; } for(int i=0;i<=256;i++)d2[i]=0; for(int i=1;i<=n;i++){ cin>>k[i]; } d[0]=0; d[1]=1,d1[1]=-1,d2[a[1]]=1; for(int i=1;i<=n;i++){ for(int x=0;x<=256;x++){ int y=x&a[i]; if(__builtin_popcount(y)==k[i]){ if(d[d2[x]]+1>d[i])d[i]=d[d2[x]]+1,d1[i]=d2[x]; } } if(d[i]>d[d2[a[i]]])d2[a[i]]=i; } int mx=0,mxi; for(int i=1;i<=n;i++){ if(d[i]>mx){ mx=d[i]; mxi=i; } } vector<int>vec; while(mxi!=-1){ vec.pb(mxi); mxi=d1[mxi]; } cout<<vec.size()<<"\n"; reverse(vec.begin(),vec.end()); for(int to:vec)cout<<to<<' '; return; } int main(){ ios_base::sync_with_stdio(false);cin.tie(0); int test=1;//cin>>test; while(test--)solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...