# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
875966 |
2023-11-20T21:26:12 Z |
rainboy |
Coins (LMIO19_monetos) |
C |
|
308 ms |
94024 KB |
#include <stdio.h>
#include <string.h>
#define N 150
#define M (N * N / 2)
#define L 64
#define INF 0x3f3f3f3f
typedef unsigned long long ull;
int main() {
static int cc[N * 2][N * 2], cc_[N * 2][N * 2], dp[N + 1][M + 1];
static ull dq[N][M + 1][3];
int t, n, m, i, i_, j, j_, s, s_, c, x;
scanf("%d%d%*d%*d", &t, &n);
if (t <= 2)
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++)
scanf("%d", &cc[i][j]);
for (j = 1; j < n; j++)
cc[i][j] += cc[i][j - 1];
}
else {
for (i = 0; i < n; i++)
for (j = 0; j < n; j++) {
scanf("%d", &c);
cc[i / 2][j / 2] += c;
}
n /= 2;
for (i = 0; i < n; i++)
for (j = 1; j < n; j++)
cc[i][j] += cc[i][j - 1];
}
m = n * n / 2;
for (i = 0; i <= n; i++)
memset(dp[i], 0x3f, (m + 1) * sizeof *dp[i]);
dp[0][0] = 0;
for (j = n - 1; j >= 0; j--)
for (i = 0; i < n; i++) {
i_ = i + 1;
for (s = i * (j + 1); (s_ = s + j + 1) <= m; s++)
if (dp[i][s] != INF) {
s_ = s + j + 1, x = dp[i][s] + cc[i][j];
if (dp[i_][s_] > x)
dp[i_][s_] = x, dq[i_][s_][j / L] |= 1ULL << j % L;
}
}
i_ = -1;
for (i = 0; i <= n; i++)
if (i_ == -1 || dp[i_][m] > dp[i][m])
i_ = i;
for (i = i_; i < n; i++)
for (j = 0; j < n; j++)
cc_[i][j] = 1;
j_ = 0, s_ = m;
while (i_ > 0) {
while ((dq[i_][s_][j_ / L] & 1ULL << j_ % L) == 0)
j_++;
i_--, s_ -= j_ + 1;
for (j = 0; j < n; j++)
cc_[i_][j] = j <= j_ ? 0 : 1;
}
if (t > 2) {
for (i = n - 1; i >= 0; i--)
for (j = n - 1; j >= 0; j--)
cc_[i * 2 + 0][j * 2 + 0] = cc_[i * 2 + 0][j * 2 + 1] = cc_[i * 2 + 1][j * 2 + 0] = cc_[i * 2 + 1][j * 2 + 1] = cc_[i][j];
n *= 2;
}
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++)
printf("%d ", cc_[i][j]);
printf("\n");
}
return 0;
}
Compilation message
monetos.c: In function 'main':
monetos.c:16:2: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
16 | scanf("%d%d%*d%*d", &t, &n);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
monetos.c:20:5: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
20 | scanf("%d", &cc[i][j]);
| ^~~~~~~~~~~~~~~~~~~~~~
monetos.c:27:5: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
27 | scanf("%d", &c);
| ^~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
6492 KB |
K = 17 |
2 |
Correct |
7 ms |
21004 KB |
K = 576 |
3 |
Incorrect |
269 ms |
46824 KB |
K = 22307 |
4 |
Partially correct |
258 ms |
46588 KB |
K = 22552 |
5 |
Runtime error |
285 ms |
93688 KB |
Execution killed with signal 11 |
6 |
Partially correct |
254 ms |
46820 KB |
K = 22279 |
7 |
Runtime error |
308 ms |
93656 KB |
Execution killed with signal 11 |
8 |
Runtime error |
266 ms |
94024 KB |
Execution killed with signal 11 |
9 |
Runtime error |
293 ms |
93952 KB |
Execution killed with signal 11 |
10 |
Runtime error |
285 ms |
93948 KB |
Execution killed with signal 11 |