#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define all(x) x.begin(),x.end()
#define ld long double
using namespace std;
int main()
{
ll n;cin>>n;
ll a[n+5],k[n+5];
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
cin>>k[i];
}
ll dp[n+5];
dp[0]=0;
dp[1]=1;
ll mx=1,par[n+5],ind=1;
par[1]=0;
for(int i=2;i<=n;i++){
dp[i]=1;
par[i]=0;
for(int j=1;j<i;j++){
ll cnt=0;
ll c=a[i]&a[j];
for(int bt=0;(1<<bt)<=a[i];bt++){
if(c&(1<<bt)) cnt++;
}
if(cnt==k[i]){
if(dp[j]+1>dp[i]){
dp[i]=dp[j]+1;par[i]=j;
}
}
}
if(dp[i]>mx){
mx=dp[i];ind=i;
}
}
vector<ll>v;
while(ind!=0){
v.pb(ind);ind=par[ind];
}
cout<<v.size()<<endl;
reverse(all(v));
for(auto to:v) cout<<to<<" ";
}
| # | 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... |