Submission #154630

#TimeUsernameProblemLanguageResultExecution timeMemory
154630jacynkaaBali Sculptures (APIO15_sculpture)C++14
100 / 100
908 ms23664 KiB
#include <bits/stdc++.h> #include <math.h> #include <chrono> using namespace std; #pragma GCC optimize("-O3") #define endl "\n" #define mp make_pair #define st first #define nd second #define pii pair<int, int> #define pb push_back #define _upgrade ios_base::sync_with_stdio(0), cout.setf(ios::fixed), cout.precision(10) //cin.tie(0); cout.tie(0); #define REP(i, n) for (int i = 0; i < (n); ++i) #define FWD(i, a, b) for (int i = (a); i < (b); ++i) #define rep(i, n) for (int i = 0; i < (n); ++i) #define fwd(i, a, b) for (int i = (a); i < (b); ++i) #define all(c) (c).begin(), (c).end() #define what(x) cerr << #x << " is " << x << endl; #define int long long const int MAXN = 2e3 + 10; const int MAXK = 44; //UWAGA unsigned int E[MAXN][MAXN]; int n, a, b; int tab[MAXN]; pii dist[MAXN]; int shortest[MAXN]; bitset<MAXN> wszystkie[MAXN]; void mini(pii A, pii &B) { B.st = min(B.st, A.st + 1); B.nd = max(B.nd, A.nd + 1); } bool solveHeura(int q) //czy wynik zawiera sie na inkluzje w q { fill(dist, dist + MAXN, mp(100000, -100000)); dist[0] = {0, 0}; rep(i, n) for (int k = i + 1; k <= n; k++) { if ((E[i][k] | q) == q) mini(dist[i], dist[k]); } //bitset<64> D(q); //cerr << D << " " << dist[n].st << " " << dist[n].nd << endl; return (dist[n].st <= b && dist[n].nd >= a); } bool solveShortest(int q) { fill(shortest, shortest + MAXN, 1e9); shortest[0] = 0; rep(i, n) for (int k = i + 1; k <= n; k++) { if ((E[i][k] | q) == q) shortest[k] = min(shortest[k], shortest[i] + 1); } //cerr << shortest[n] << endl; return shortest[n] <= b; } bool solveBitset(int q) { rep(i, MAXN) wszystkie[i].reset(); wszystkie[0][0] = true; rep(i, n) for (int k = i + 1; k <= n; k++) { if ((E[i][k] | q) == q) wszystkie[k] = (wszystkie[k] | (wszystkie[i] << 1)); } for (int i = a; i <= b; i++) if (wszystkie[n][i]) return true; return false; } void Heura(int &wynik) { for (int k = MAXK; k >= 0; k--) if (!solveHeura(wynik + (1ll << k) - 1)) wynik += (1ll << k); } void wzorShortest(int &wynik) { for (int k = MAXK; k >= 0; k--) if (!solveShortest(wynik + (1ll << k) - 1)) wynik += (1ll << k); } void wzorBitset(int &wynik) { for (int k = MAXK; k >= 0; k--) if (!solveBitset(wynik + (1ll << k) - 1)) wynik += (1ll << k); } void pre() { cin >> n >> a >> b; rep(i, n) cin >> tab[i]; rep(i, n) { int val = tab[i]; for (int k = i + 1; k <= n; k++) { E[i][k] = val; val += tab[k]; } } } main() { _upgrade; pre(); int wynik = 0; //Huera(wynik); //wzorShortest(wynik); wzorBitset(wynik); cout << wynik << endl; }

Compilation message (stderr)

sculpture.cpp: In function 'bool solveHeura(long long int)':
sculpture.cpp:44:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if ((E[i][k] | q) == q)
             ~~~~~~~~~~~~~~^~~~
sculpture.cpp: In function 'bool solveShortest(long long int)':
sculpture.cpp:58:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if ((E[i][k] | q) == q)
             ~~~~~~~~~~~~~~^~~~
sculpture.cpp: In function 'bool solveBitset(long long int)':
sculpture.cpp:71:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if ((E[i][k] | q) == q)
             ~~~~~~~~~~~~~~^~~~
sculpture.cpp: At global scope:
sculpture.cpp:117:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
 main()
      ^
#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...