Submission #64847065
Source Code Expand
Copy
#include <stdio.h>#include <stdlib.h>struct pair_s {int a, b;int idx;};int cmp(const void* x, const void* y) {struct pair_s a = *(const struct pair_s*)x, b = *(const struct pair_s*)y;if (a.a != b.a) return a.a < b.a ? -1 : 1;if (a.b != b.b) return a.b < b.b ? -1 : 1;return a.idx < b.idx ? -1 : a.idx > b.idx;}int A[212345 * 2];struct pair_s pairs[212345 * 2];int ng[212345];int main(void) {int T, tc;
#include <stdio.h>
#include <stdlib.h>
struct pair_s {
int a, b;
int idx;
};
int cmp(const void* x, const void* y) {
struct pair_s a = *(const struct pair_s*)x, b = *(const struct pair_s*)y;
if (a.a != b.a) return a.a < b.a ? -1 : 1;
if (a.b != b.b) return a.b < b.b ? -1 : 1;
return a.idx < b.idx ? -1 : a.idx > b.idx;
}
int A[212345 * 2];
struct pair_s pairs[212345 * 2];
int ng[212345];
int main(void) {
int T, tc;
if (scanf("%d", &T) != 1) return 1;
for (tc = 1; tc <= T; tc++) {
int N;
int i;
int ans = 0;
if (scanf("%d", &N) != 1) return 1;
for (i = 0; i < 2 * N; i++) {
if (scanf("%d", &A[i]) != 1) return 1;
}
for (i = 1; i < 2 * N; i++) {
if (A[i - 1] <= A[i]) {
pairs[i - 1].a = A[i - 1];
pairs[i - 1].b = A[i];
} else {
pairs[i - 1].a = A[i];
pairs[i - 1].b = A[i - 1];
}
pairs[i - 1].idx = i - 1;
if (A[i - 1] == A[i]) ng[A[i]] = tc;
}
qsort(pairs, 2 * N - 1, sizeof(*pairs), cmp);
for (i = 1; i < 2 * N - 1; i++) {
if (
ng[pairs[i].a] != tc &&
ng[pairs[i].b] != tc &&
pairs[i - 1].a == pairs[i].a &&
pairs[i - 1].b == pairs[i].b &&
(
pairs[i - 1].idx < pairs[i].idx - 1 ||
(
i > 1 &&
pairs[i - 2].a == pairs[i].a &&
pairs[i - 2].b == pairs[i].b &&
pairs[i - 2].idx < pairs[i].idx - 1
)
)
) {
ans++;
}
}
printf("%d\n", ans);
}
return 0;
}
/*
隣接している数値はアウト
それ以外で、隣同士で順不同 (すなわち、小さい方を先に正規化) のペアを取り出して、
同じペアが2個あればおk
↑嘘 2 1 2 x x x x x 1 みたいなので死ぬ
「ソートして隣接した要素の位置が2以上離れていればおk」だと、1 2 1 2 みたいなやつで死ぬ
なぜなら、同じペアが3個検出され、1ずつしか離れていないことになる
隣接している数値は1ペアしか出てこないので、特別扱いで弾かなくておk
↑大嘘 2 1 1 2 みたいなやつで引っかかる
↑大嘘ってほどでもない ペアから外す必要はない 別のフラグで管理する
*/
Submission Info
| Submission Time | |
|---|---|
| Task | D - Switch Seats |
| User | mikecat |
| Language | C (gcc 12.2.0) |
| Score | 400 |
| Code Size | 2211 Byte |
| Status | AC |
| Exec Time | 103 ms |
| Memory | 12388 KB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 400 / 400 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | 00_sample_00.txt |
| All | 00_sample_00.txt, 01_small_00.txt, 01_small_01.txt, 01_small_02.txt, 01_small_03.txt, 01_small_04.txt, 01_small_05.txt, 01_small_06.txt, 02_random_1_00.txt, 02_random_1_01.txt, 02_random_1_02.txt, 02_random_1_03.txt, 02_random_1_04.txt, 03_random_2_00.txt, 03_random_2_01.txt, 03_random_2_02.txt, 04_max_00.txt, 05_corner_00.txt, 05_corner_01.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 00_sample_00.txt | AC | 1 ms | 1628 KB |
| 01_small_00.txt | AC | 34 ms | 1568 KB |
| 01_small_01.txt | AC | 34 ms | 1712 KB |
| 01_small_02.txt | AC | 41 ms | 1592 KB |
| 01_small_03.txt | AC | 43 ms | 1596 KB |
| 01_small_04.txt | AC | 42 ms | 1580 KB |
| 01_small_05.txt | AC | 42 ms | 1736 KB |
| 01_small_06.txt | AC | 42 ms | 1732 KB |
| 02_random_1_00.txt | AC | 103 ms | 12388 KB |
| 02_random_1_01.txt | AC | 102 ms | 12244 KB |
| 02_random_1_02.txt | AC | 103 ms | 12348 KB |
| 02_random_1_03.txt | AC | 103 ms | 12360 KB |
| 02_random_1_04.txt | AC | 103 ms | 12316 KB |
| 03_random_2_00.txt | AC | 102 ms | 12320 KB |
| 03_random_2_01.txt | AC | 103 ms | 12356 KB |
| 03_random_2_02.txt | AC | 102 ms | 12352 KB |
| 04_max_00.txt | AC | 51 ms | 12340 KB |
| 05_corner_00.txt | AC | 48 ms | 10764 KB |
| 05_corner_01.txt | AC | 50 ms | 10740 KB |