제출 #919812

#제출 시각아이디문제언어결과실행 시간메모리
919812LOLOLOLongest beautiful sequence (IZhO17_subsequence)C++17
100 / 100
4672 ms199648 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define f first #define s second #define pb push_back #define ep emplace #define eb emplace_back #define lb lower_bound #define ub upper_bound #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define uniquev(v) sort(all(v)), (v).resize(unique(all(v)) - (v).begin()) #define mem(f,x) memset(f , x , sizeof(f)) #define sz(x) (int)(x).size() #define __lcm(a, b) (1ll * ((a) / __gcd((a), (b))) * (b)) #define mxx *max_element #define mnn *min_element #define cntbit(x) __builtin_popcountll(x) #define len(x) (int)(x.length()) const int N = 1e5 + 100; const int M = 1025; int a[N], k[N], f[N], trace[N], cnt[M]; pair <int, int> dp[M][M][24]; void maximize(pair <int, int> &a, pair <int, int> b) { if (a < b) a = b; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); for (int i = 0; i < M; i++) cnt[i] = cntbit(i); int n; cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; for (int i = 1; i <= n; i++) cin >> k[i]; for (int i = 1; i <= n; i++) { int pr = 0, suff = 0; for (int j = 0; j < 10; j++) { if (a[i] & (1 << j)) { pr |= (1 << j); } if (a[i] & (1 << (j + 10))) { suff |= (1 << j); } } f[i] = 1; for (int mask = 0; mask < M; mask++) { int cc = cnt[mask & pr]; if (cc <= k[i] && f[i] < dp[mask][suff][k[i] - cc].f + 1) { f[i] = dp[mask][suff][k[i] - cc].f + 1; trace[i] = dp[mask][suff][k[i] - cc].s; } } for (int mask = 0; mask < M; mask++) { maximize(dp[pr][mask][cnt[suff & mask]], make_pair(f[i], i)); } } int id = 1; for (int i = 1; i <= n; i++) if (f[i] > f[id]) id = i; cout << f[id] << "\n"; vector <int> lst; while (id) { lst.pb(id); id = trace[id]; } reverse(all(lst)); for (auto x : lst) cout << x << " "; cout << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...