Submission #45939

#TimeUsernameProblemLanguageResultExecution timeMemory
45939Just_Solve_The_ProblemBali Sculptures (APIO15_sculpture)C++11
100 / 100
190 ms16508 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define eb emplace_back #define ll long long #define pii pair < int, int > #define fr first #define sc second #define mk make_pair #define sz(s) (int)s.size() #define all(s) s.begin(), s.end() #define ok puts("ok"); #define whatis(x) cerr << #x << " = " << x << endl; #define pause system("pause"); const int N = (int)2e3 + 7; const int inf = (int)1e9 + 7; int ar[N]; int dp[N]; int dpp[N][N]; int n, a, b; ll pref[N]; ll ans; ll get(int l, int r) { return pref[r] - pref[l - 1]; } bool check1(ll x) { for (int i = 1; i <= n; i++) { dp[i] = inf; for (int j = i; j >= 1; j--) { if ((x | get(j, i)) == x) { dp[i] = min(dp[i], dp[j - 1] + 1); } } } return dp[n] <= b; } bool check(int x) { memset(dpp, 0, sizeof dpp); dpp[0][0] = 1; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { for (int k = j; k >= 1; k--) { if ((ans | ((get(k, j) >> x) << x)) == ans) { dpp[i][j] |= dpp[i - 1][k - 1]; } } } } for (int i = a; i <= b; i++) { if (dpp[i][n]) return 1; } return 0; } main() { scanf("%d %d %d", &n, &a, &b); for (int i = 1; i <= n; i++) { scanf("%d", &ar[i]); pref[i] = pref[i - 1] + ar[i]; } if (a == 1) { for (int i = 40; i >= 0; i--) { if (!check1(ans + (1LL << i) - 1)) { ans += (1LL << i); } } } else { for (int k = 40; k >= 0; k--) { if (!check(k)) { ans += (1LL << k); } } } printf("%lld", ans); }

Compilation message (stderr)

sculpture.cpp:62:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
 main() {
      ^
sculpture.cpp: In function 'int main()':
sculpture.cpp:63:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d %d", &n, &a, &b);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
sculpture.cpp:65:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &ar[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...
#Verdict Execution timeMemoryGrader output
Fetching results...