(UPD: 2024-12-04 14:48 UTC) Judge is not working due to Cloudflare incident. (URL) We can do nothing about it, sorry. After the incident is resolved, we will grade all submissions.

Submission #624311

#TimeUsernameProblemLanguageResultExecution timeMemory
624311GusterGoose27Longest beautiful sequence (IZhO17_subsequence)C++11
100 / 100
3743 ms48244 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN = 1e5; const int MAXALLOC = 1024; int n; int nums[MAXN]; int com_bits[MAXN]; int best_dp[MAXALLOC][MAXALLOC][11]; // first half, number of bits in common with second half int dp[MAXN+1]; int pdp[MAXN+1]; int dpmax(int a, int b) { if (dp[a] > dp[b]) return a; return b; } void print_vals(int i, bool space = 0) { if (i == 0) return; print_vals(pdp[i], 1); cout << i; if (space) cout << " "; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n; for (int i = 0; i < n; i++) cin >> nums[i]; for (int i = 0; i < n; i++) cin >> com_bits[i]; int ans = 0; for (int i = 0; i < n; i++) { int p1 = nums[i] >> 10; int p2 = nums[i] - (p1 << 10); int b = 0; for (int mask = 0; mask < MAXALLOC; mask++) { int req = com_bits[i]-__builtin_popcount(p1&mask); if (0 <= req && req <= 10) b = dpmax(b, best_dp[mask][p2][req]); } dp[i+1] = 1+dp[b]; pdp[i+1] = b; ans = dpmax(ans, i+1); for (int mask = 0; mask < MAXALLOC; mask++) { best_dp[p1][mask][__builtin_popcount(mask&p2)] = dpmax(best_dp[p1][mask][__builtin_popcount(mask&p2)], i+1); } } cout << dp[ans] << "\n"; print_vals(ans); cout << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...