Submission #37322

#TimeUsernameProblemLanguageResultExecution timeMemory
37322cheater2kPopeala (CEOI16_popeala)C++14
100 / 100
1896 ms16224 KiB
#include <bits/stdc++.h> using namespace std; const int MAXT = 20010, MAXN = 55; const int INF = 2e9 + 10023; int N, S, T; char a[MAXN][MAXT]; int score[MAXT]; int sum[MAXN][MAXT]; int f[MAXT][MAXN]; int cur[MAXN], mn[MAXN][MAXT]; int get(int l, int r) { if (l > r) return 0; int res = 0; for (int i = 1; i <= N; ++i) res += (sum[i][r] - sum[i][l-1] == r - l + 1); return res; } void reset(int k) { for (int i = 0; i <= N; ++i) { mn[i][0] = f[0][k]; for (int j = 1; j <= T; ++j) mn[i][j] = min(mn[i][j-1], f[j][k] - i * score[j]); } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> N >> T >> S; for (int i = 1; i <= T; ++i) cin >> score[i], score[i] += score[i-1]; for (int i = 1; i <= N; ++i) for (int j = 1; j <= T; ++j) cin >> a[i][j], sum[i][j] = sum[i][j-1] + (a[i][j] - '0'); for (int i = 1; i <= T; ++i) f[i][0] = INF; reset(0); for (int k = 1; k <= S; ++k) { vector <int> v; for (int i = 1; i <= N; ++i) cur[i] = 1, v.push_back(i); f[0][k] = INF; for (int i = 1; i <= T; ++i) { for (int j = 1; j <= N; ++j) cur[j] = (a[j][i] == '1') ? cur[j] : i + 1; vector <int> newV; for (int j = 1; j <= N; ++j) if (cur[j] == i + 1) newV.push_back(j); for (int j = 0; j < v.size(); ++j) if (cur[v[j]] != i + 1) newV.push_back(v[j]); v = newV; f[i][k] = INF; if (i < k) continue; for (int j = 0; j <= v.size(); ++j) { int l = (j == v.size()) ? 1 : cur[v[j]]; int r = (j == 0) ? i : cur[v[j-1]] - 1; if (l <= r) f[i][k] = min(f[i][k], mn[N-j][r-1] + (N-j) * score[i]); } } reset(k); } for (int k = 1; k <= S; ++k) cout << f[T][k] << endl; }

Compilation message (stderr)

popeala.cpp: In function 'int main()':
popeala.cpp:42:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for (int j = 0; j < v.size(); ++j) if (cur[v[j]] != i + 1) newV.push_back(v[j]);
                               ^
popeala.cpp:46:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for (int j = 0; j <= v.size(); ++j) {
                               ^
popeala.cpp:47:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                 int l = (j == v.size()) ? 1 : cur[v[j]];
                            ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...