이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int, int>
const int MAX_N = 1e5;
const int BAR = 2;
const int MAX_X = 20;
int n;
pii dp[MAX_N], back[MAX_N];
int a[MAX_N], k[MAX_N];
int popcount(int i){
if(i==0){
return 0;
}
return popcount(i & (i-1)) +1;
}
void display(pii u){
//cout<<u.first<<" "<<u.second<<endl;
if(u.second!=-1){
cout<<u.second+1<<" ";
display(back[u.second]);
}
}
signed main(){
cin>>n;
for(int i = 0; i<n; i++){
cin>>a[i];
}
for(int i = 0; i<n; i++){
cin>>k[i];
}
pii ans = pii(0, n-1);
for(int i = n-1; i>=0; i--){
pii res =pii(0, -1);
for(int j = i+1; j<n; j++){
if(popcount(a[i]&a[j]) == k[j]){
res = max(res, dp[j]);
}
}
back[i] = res;
res.first+=1;
//cout<<res.first<<" "<<res.second<<endl;
res.second= i;
ans = max(ans, res);
dp[i] = res;
}
cout<<ans.first<<endl;
display(ans);
cout<<endl;
}
# | 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... |