This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
pair<int,int> dp[(1<<10)][(1<<10)][11];
int a[100001],b[100001],telp[100001];
int main(){
int n;
cin>>n;
for(int i = 1;i<=n;i++)cin>>a[i];
for(int i = 1;i<=n;i++)cin>>b[i];
int ans = 0 , strt = 0;
for(int i = 1;i<=n;i++){
int fi = a[i]>>10 , se = a[i]&((1<<10)-1);
int an = 1;
for(int mask = 0;mask<(1<<10);mask++){
int ne = __builtin_popcount(mask&fi);
int neeeed = b[i]-ne;
if(neeeed>=0&&neeeed<=10){
if(an<dp[mask][se][neeeed].first+1){
an = dp[mask][se][neeeed].first+1;
telp[i] = dp[mask][se][neeeed].second;
}
}
}
for(int mask = 0;mask<(1<<10);mask++){
int ne = __builtin_popcount(mask&se);
if(dp[fi][mask][ne].first<an){
dp[fi][mask][ne].first = an;
dp[fi][mask][ne].second = i;
}
}
if(ans<an){
ans = an;
strt = i;
}
}
vector<int> tmp;
while(strt>0){
tmp.push_back(strt);
strt = telp[strt];
}
reverse(tmp.begin(),tmp.end());
cout<<ans<<endl;
for(auto i:tmp){
cout<<i<<" ";
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |