제출 #1273418

#제출 시각아이디문제언어결과실행 시간메모리
1273418pvproBali Sculptures (APIO15_sculpture)C++20
100 / 100
89 ms588 KiB
#ifdef LOCAL #define _GLIBCXX_DEBUG #else #pragma GCC optimize("O3,Ofast,unroll-loops") #endif #include <iostream> #include <fstream> #include <sstream> #include <iomanip> #include <cstdio> #include <vector> #include <string> #include <stack> #include <queue> #include <deque> #include <bitset> #include <algorithm> #include <cmath> #include <set> #include <unordered_set> #include <map> #include <unordered_map> #include <chrono> #include <random> #include <complex> #include <numeric> #include <assert.h> #include <functional> #include <climits> #include <cstring> #include <iterator> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; using ll = long long; using ld = long double; using ull = unsigned long long; using ushort = unsigned short; #define int ll #ifndef LOCAL #define endl "\n" #endif #define f first #define s second #define vec vector #define pii pair<int, int> #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define pb push_back #define mp make_pair template<typename T1, typename T2> istream& operator>> (istream &in, pair<T1, T2> &p) { in >> p.f >> p.s; return in; } template<typename T1, typename T2> ostream& operator<< (ostream &out, pair<T1, T2> p) { out << "(" << p.f << " " << p.s << ")"; return out; } #define printv(v) cerr << #v << " "; for (auto &x : v) { cerr << x << " "; } cerr << endl; #define printvv(v) cerr << #v << " "; for (auto &x : v) { for (auto &y : x) { cerr << y << " "; } cerr << endl; } #define debug(x) cerr << #x << " " << x << endl; template<typename T> istream& operator>> (istream &in, vector<T> &v) { for (auto &x : v) { in >> x; } return in; } template<typename T> ostream& operator<< (ostream &out, vector<T> v) { for (auto &x : v) { out << x << " "; } return out; } template<typename T> void operator-=(vector<T> &v, int delta) { for (auto &x : v) { x -= delta; } } template<typename T> void operator+=(vector<T> &v, int delta) { for (auto &x : v) { x += delta; } } mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count()); typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set; signed Main(); void Solve(); void PreCalc(); static void run_with_stack_size(signed (*func)(), size_t stsize) { char *stack, *send; stack = (char *)malloc(stsize); send = stack+stsize-16; send = (char *)((uintptr_t)send/16*16); asm volatile( "mov %%rsp, (%0)\n" "mov %0, %%rsp\n" : : "r" (send)); func(); asm volatile( "mov (%0), %%rsp\n" : : "r" (send)); free(stack); } signed main() { #ifdef LOCAL freopen("in.txt", "r", stdin); int tStart = clock(); run_with_stack_size(Main, 1024*1024*1024); cout << endl << "execution time : " << (clock() - tStart) / 1e3 << endl; #else ios::sync_with_stdio(false); cin.tie(0); Main(); #endif } signed Main() { PreCalc(); int t = 1; // cin >> t; int test = 0; while (t--) { ++test; #ifdef LOCAL cout << "--------- TEST #" << test << " ----------" << endl; #endif Solve(); } return 0; } /* This code is praying to GOD for protecting from bugs and "other things" */ void PreCalc() { } bool check(ll M, vector<int> a, int l, int r) { int n = a.size(); vector<int> p = {0}; for (auto &x : a) { p.pb(p.back() + x); } if (l == 1) { vector<int> dp(n + 1); for (int i = 0; i < n; ++i) { dp[i + 1] = r + 1; for (int j = 0; j <= i; ++j) { if (((p[i + 1] - p[j])|M) == M) { dp[i + 1] = min(dp[i + 1], dp[j] + 1); } } } return (dp.back() <= r); } else { vector<bitset<101>> dp(n + 1); dp[0][0] = 1; for (int i = 0; i < n; ++i) { for (int j = 0; j <= i; ++j) { if (((p[i + 1] - p[j])|M) == M) { dp[i + 1] |= dp[j]; } } dp[i + 1] = (dp[i + 1]<<1); } for (int i = l; i <= r; ++i) { if (dp.back()[i]) { return true; } } return false; } } void Solve() { int n, a, b; cin >> n >> a >> b; vector<int> y(n); cin >> y; ll M = 0; for (int lg = 50; lg >= 0; --lg) { if (!check(M + (1ll<<lg) - 1, y, a, b)) { M += (1ll<<lg); } } cout << M << endl; }
#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...