제출 #1269076

#제출 시각아이디문제언어결과실행 시간메모리
1269076binminh01Longest beautiful sequence (IZhO17_subsequence)C++20
40 / 100
6090 ms2004 KiB
#include<bits/allocator.h>
#pragma GCC optimize("Ofast,unroll-loops")
#pragma GCC target("avx2,fma,bmi,bmi2,popcnt,lzcnt,tune=native")

#include<stdio.h>
#define scan(x) do{while((x=getchar())<'0'); for(x-='0'; '0'<=(_=getchar()); x=(x<<3)+(x<<1)+_-'0');}while(0)
char _;
constexpr int N = 100000;
int n, m, a[N], b[N], c[N], f[N], g[N];
int main() {
    scan(n);
    for (int i = 0; i < n; ++i) {scan(a[i]);}
    for (int i = 0; i < n; ++i) {scan(b[i]);}
    int k = 0;
    for (int i = 0; i < n; ++i) {
        g[i] = -1;
        for (int j = 0; j < i; ++j) if (__builtin_popcount(a[i] & a[j]) == b[i] && f[i] < f[j]) f[i] = f[j], g[i] = j;
        ++f[i];
        if (f[k] < f[i]) k = i;
    }
    printf("%d\n", f[k]);
    for (; ~k; k = g[k]) c[m++] = k;
    for (int i = m - 1; i >= 0; --i) printf("%d ", c[i] + 1);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...