(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 #1122108

#TimeUsernameProblemLanguageResultExecution timeMemory
1122108KasymKLongest beautiful sequence (IZhO17_subsequence)C++17
100 / 100
1721 ms65096 KiB
#include "bits/stdc++.h" using namespace std; #define ff first #define ss second #define all(v) v.begin(), v.end() #define ll long long #define pb push_back #define pii pair<int, int> #define pli pair<ll, int> #define pll pair<ll, ll> #define tr(i, c) for(auto i = c.begin(); i != c.end(); ++i) #define wr puts("----------------") template<class T>bool umin(T& a,T b){if(a>b){a=b;return 1;}return 0;} template<class T>bool umax(T& a,T b){if(a<b){a=b;return 1;}return 0;} const int ad = 1024; const int mal = 10; const int N = 1e5+5; int ans[N], dp[ad+5][ad+5][15], v[N], k[N], bt[ad+5], press[N]; int main(){ int n; scanf("%d", &n); for(int i = 0; i <= ad; ++i) bt[i] = __builtin_popcount(i); for(int i = 1; i <= n; ++i) scanf("%d", v+i); for(int i = 1; i <= n; ++i) scanf("%d", k+i); int answer = 0, how = 0; for(int i = 1; i <= n; ++i){ int a = v[i]/ad; int b = v[i]-a*ad; ans[i] = 1; for(int j = 0; j <= ad; ++j){ int need = k[i]-bt[a&j]; if(need>mal or need<0) continue; if(umax(ans[i], ans[dp[j][b][need]]+1)) press[i] = dp[j][b][need]; } for(int j = 0; j <= ad; ++j) if(ans[dp[a][j][bt[j&b]]]<ans[i]) dp[a][j][bt[j&b]] = i; if(umax(answer, ans[i])) how = i; } printf("%d\n", answer); vector<int> A; while(how){ A.pb(how); how = press[how]; } reverse(all(A)); tr(it, A) printf("%d ", *it); puts(""); return 0; }

Compilation message (stderr)

subsequence.cpp: In function 'int main()':
subsequence.cpp:22:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   22 |     scanf("%d", &n);
      |     ~~~~~^~~~~~~~~~
subsequence.cpp:26:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   26 |         scanf("%d", v+i);
      |         ~~~~~^~~~~~~~~~~
subsequence.cpp:28:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   28 |         scanf("%d", k+i);
      |         ~~~~~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...