Submission #844725

#TimeUsernameProblemLanguageResultExecution timeMemory
844725Pa_shaLongest beautiful sequence (IZhO17_subsequence)C++17
23 / 100
6020 ms3420 KiB
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
constexpr int mod=1e9+7;
void solve()
{
    int n;
    cin>>n;
    int a[n],k[n];
    int to[n]={0},ans=0;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    for(int i=0;i<n;i++)
    {
        to[i]=-1;
        cin>>k[i];
    }
    int dp[n]={0};
    vector<int>res;
    for(int i=0;i<n;i++)
    {
        dp[i]=1;
        for(int j=i-1;j+1>=dp[i];j--)
        {
            if(__builtin_popcount((a[i]&a[j]))==k[i])
            {
                if(dp[j]+1>dp[i])
                {
                    to[i]=j;
                    dp[i]=dp[j]+1;
                }
            }
        }
        if(dp[i]>dp[ans])
        {
            ans=i;
        }
    }
    while(ans>-1)
    {
        res.push_back(ans+1);
        ans=to[ans];
    }
    reverse(res.begin(),res.end());
    cout<<res.size()<<endl;
    for(int&i:res)
    {
        cout<<i<<" ";
    }
    cout<<endl;
}
int32_t main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int t=1;
//    cin>>t;
    while(t--)
    {
        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...