#include<bits/stdc++.h>
using namespace std;
int n;
int arr[100023],k[100023];
int bit[1024][1024],dp[1024][1024][11];
int par[100023],ans[100023];
int mx=1;
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>arr[i];
}
for(int i=1;i<=n;i++){
cin>>k[i];
}
for(int i=0;i<1024;i++){
for(int j=0;j<1024;j++){
for(int l=0;l<10;l++){
bit[i][j]+=!!((1<<l)&(i&j));
}
}
}
for(int i=1;i<=n;i++){
int a=(arr[i]>>10),b=(arr[i]&1023);
ans[i]=1;
for(int j=0;j<1024;j++){
int need=k[i]-bit[a][j];
if(need<0||need>10)continue;
if(ans[dp[j][b][need]]+1>ans[i]){
par[i]=dp[j][b][need];
ans[i]=ans[par[i]]+1;
}
}
for(int j=0;j<1024;j++){
if(ans[i]>ans[dp[a][j][bit[b][j]]]){
dp[a][j][bit[b][j]]=i;
}
}
if(ans[i]>ans[mx])mx=i;
}
vector<int>v;
cout<<ans[mx]<<endl;
while(mx){
v.push_back(mx);
mx=par[mx];
}
while(v.size()){
cout<<v.back()<<" ";
v.pop_back();
}
}
# | 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... |