Submission #73225976
Source Code Expand
Copy
#include <stdio.h>#include <stdlib.h>struct yokobou_s {int a, b;};/* bの降順 → aの昇順 */int cmp(const void* x, const void* y) {struct yokobou_s a = *(const struct yokobou_s*)x, b = *(const struct yokobou_s*)y;return((a.b < b.b) - (a.b > b.b)) * 2 +((a.a > b.a) - (a.a < b.a));}int n, m, h, k;int s[1024];struct yokobou_s ab[114514];int pos[1024];int dore[114514][2];
#include <stdio.h>
#include <stdlib.h>
struct yokobou_s {
int a, b;
};
/* bの降順 → aの昇順 */
int cmp(const void* x, const void* y) {
struct yokobou_s a = *(const struct yokobou_s*)x, b = *(const struct yokobou_s*)y;
return
((a.b < b.b) - (a.b > b.b)) * 2 +
((a.a > b.a) - (a.a < b.a));
}
int n, m, h, k;
int s[1024];
struct yokobou_s ab[114514];
int pos[1024];
int dore[114514][2];
char used[1024];
int main(void) {
int i;
int cur = 0, ans;
if (scanf("%d%d%d%d", &n, &m, &h, &k) != 4) return 1;
for (i = 1; i <= n; i++) {
if (scanf("%d", &s[i]) != 1) return 1;
}
for (i = 0; i < m; i++) {
if (scanf("%d%d", &ab[i].a, &ab[i].b) != 2) return 1;
}
qsort(ab, m, sizeof(*ab), cmp);
for (i = 1; i <= n; i++) {
pos[i] = i;
}
for (i = 0; i < m; i++) {
int t;
dore[i][0] = pos[ab[i].a];
dore[i][1] = pos[ab[i].a + 1];
t = pos[ab[i].a];
pos[ab[i].a] = pos[ab[i].a + 1];
pos[ab[i].a + 1] = t;
}
for (i = 1; i <= k; i++) {
cur += s[pos[i]];
used[pos[i]] = 1;
}
ans = cur;
for (i = 0; i < m; i++) {
int candidate = cur;
if (used[dore[i][0]] && !used[dore[i][1]]) {
candidate -= s[dore[i][0]];
candidate += s[dore[i][1]];
} else if (!used[dore[i][0]] && used[dore[i][1]]) {
candidate -= s[dore[i][1]];
candidate += s[dore[i][0]];
}
if (candidate < ans) ans = candidate;
}
printf("%d\n", ans);
return 0;
}
/*
横棒の削除 → その横棒の真下に横棒を追加して入れ替えるのと同じ
その横棒を通る2本のみに影響する
下から上にどこに行くかを調べ、各横棒について差分
*/
Submission Info
| Submission Time | |
|---|---|
| Task | C - あみだくじ |
| User | mikecat |
| Language | C23 (GCC 14.2.0) |
| Score | 20 |
| Code Size | 1672 Byte |
| Status | AC |
| Exec Time | 21 ms |
| Memory | 3384 KiB |
Judge Result
| Set Name | set01 | set02 | set03 | set04 | set05 | set06 | set07 | set08 | set09 | set10 | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Score / Max Score | 2 / 2 | 2 / 2 | 2 / 2 | 2 / 2 | 2 / 2 | 2 / 2 | 2 / 2 | 2 / 2 | 2 / 2 | 2 / 2 | ||||||||||||||||||||
| Status |
|
|
|
|
|
|
|
|
|
|
| Set Name | Test Cases |
|---|---|
| set01 | data1 |
| set02 | data2 |
| set03 | data3 |
| set04 | data4 |
| set05 | data5 |
| set06 | data6 |
| set07 | data7 |
| set08 | data8 |
| set09 | data9 |
| set10 | data10 |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| data1 | AC | 1 ms | 1636 KiB |
| data10 | AC | 21 ms | 3384 KiB |
| data2 | AC | 0 ms | 1660 KiB |
| data3 | AC | 0 ms | 1596 KiB |
| data4 | AC | 0 ms | 1848 KiB |
| data5 | AC | 1 ms | 1724 KiB |
| data6 | AC | 1 ms | 1876 KiB |
| data7 | AC | 2 ms | 1888 KiB |
| data8 | AC | 4 ms | 2016 KiB |
| data9 | AC | 11 ms | 2456 KiB |