Submission #69426542
Source Code Expand
Copy
#include <stdio.h>#include <limits.h>#include <inttypes.h>static unsigned int rx = 101280534u;static unsigned int ry = 356793812u;static unsigned int rz = 3171697253u;static unsigned int rw = 732686597u;unsigned int randint_raw(void) {unsigned int t;t = (rx ^ (rx << 11));rx = ry; ry = rz; rz = rw;rw = (rw ^ (rw >> 19)) ^ (t ^ (t >> 8));return rw;}/* [0, max) */unsigned int randint(unsigned int max) {unsigned int d = ((UINT_MAX % max) + 1) % max;unsigned int sel;
#include <stdio.h>
#include <limits.h>
#include <inttypes.h>
static unsigned int rx = 101280534u;
static unsigned int ry = 356793812u;
static unsigned int rz = 3171697253u;
static unsigned int rw = 732686597u;
unsigned int randint_raw(void) {
unsigned int t;
t = (rx ^ (rx << 11));
rx = ry; ry = rz; rz = rw;
rw = (rw ^ (rw >> 19)) ^ (t ^ (t >> 8));
return rw;
}
/* [0, max) */
unsigned int randint(unsigned int max) {
unsigned int d = ((UINT_MAX % max) + 1) % max;
unsigned int sel;
do {
sel = randint_raw();
} while (sel > UINT_MAX - d);
return sel % max;
}
int N;
int x[512345], y[512345];
int main(void) {
int i;
if (scanf("%d", &N) != 1) return 1;
for (i = 0; i < N; i++) {
if (scanf("%d%d", &x[i], &y[i]) != 2) return 1;
}
for (i = 0; i < 50; i++) {
int j;
int s1 = randint(N);
int s2 = randint(N - 1);
int64_t a, b, c;
int cnt = 0;
if (s2 >= s1) s2++;
a = y[s2] - y[s1];
b = x[s1] - x[s2];
c = -(a * x[s1] + b * y[s1]);
for (j = 0; j < N; j++) {
cnt += a * x[j] + b * y[j] + c == 0;
}
if (cnt > N / 2) {
puts("Yes");
printf("%" PRId64 " %" PRId64 " %" PRId64 "\n", a, b, c);
return 0;
}
}
puts("No");
return 0;
}
/*
異なる2点を選ぶ → それらを通る直線が決まる
過半数を通る直線が存在するならば、それらを選べれば勝ち
2点適当に選んでそれらが両方正解の確率は、だいたい1/2×1/2=1/4くらいのはず
よって、ミラー・ラビン法的に考えて、まあ50回くらいトライすればまずいけるやろ
(x1, y1) と (x2, y2) を通る直線は
傾き (y2 - y1) / (x2 - x1) なので y = (y2 - y1) / (x2 - x1) * x + k
変形して (y2 - y1) * x + (x1 - x2) * y + k * (x2 - x1) = 0
*/
Submission Info
| Submission Time | |
|---|---|
| Task | E - Colinear |
| User | mikecat |
| Language | C (gcc 12.2.0) |
| Score | 450 |
| Code Size | 1807 Byte |
| Status | AC |
| Exec Time | 123 ms |
| Memory | 5656 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 450 / 450 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt |
| All | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 02_corner_1_00.txt, 02_corner_1_01.txt, 02_corner_1_02.txt, 02_corner_1_03.txt, 02_corner_1_04.txt, 02_corner_1_05.txt, 03_corner_2_00.txt, 03_corner_2_01.txt, 03_corner_2_02.txt, 03_corner_2_03.txt, 04_corner_3_00.txt, 04_corner_3_01.txt, 04_corner_3_02.txt, 04_corner_3_03.txt, 04_corner_3_04.txt, 04_corner_3_05.txt, 04_corner_3_06.txt, 04_corner_3_07.txt, 04_corner_3_08.txt, 04_corner_3_09.txt, 05_corner_4_00.txt, 05_corner_4_01.txt, 06_corner_5_00.txt, 06_corner_5_01.txt, 07_corner_6_00.txt, 07_corner_6_01.txt, 07_corner_6_02.txt, 07_corner_6_03.txt, 07_corner_6_04.txt, 07_corner_6_05.txt, 07_corner_6_06.txt, 07_corner_6_07.txt, 07_corner_6_08.txt, 07_corner_6_09.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 00_sample_00.txt | AC | 0 ms | 1628 KiB |
| 00_sample_01.txt | AC | 0 ms | 1628 KiB |
| 00_sample_02.txt | AC | 0 ms | 1644 KiB |
| 01_random_00.txt | AC | 74 ms | 4704 KiB |
| 01_random_01.txt | AC | 118 ms | 5548 KiB |
| 01_random_02.txt | AC | 100 ms | 5504 KiB |
| 01_random_03.txt | AC | 123 ms | 5460 KiB |
| 01_random_04.txt | AC | 99 ms | 5656 KiB |
| 01_random_05.txt | AC | 120 ms | 5532 KiB |
| 01_random_06.txt | AC | 123 ms | 5548 KiB |
| 01_random_07.txt | AC | 123 ms | 5468 KiB |
| 02_corner_1_00.txt | AC | 99 ms | 5656 KiB |
| 02_corner_1_01.txt | AC | 101 ms | 5560 KiB |
| 02_corner_1_02.txt | AC | 98 ms | 5492 KiB |
| 02_corner_1_03.txt | AC | 93 ms | 5480 KiB |
| 02_corner_1_04.txt | AC | 99 ms | 5628 KiB |
| 02_corner_1_05.txt | AC | 99 ms | 5492 KiB |
| 03_corner_2_00.txt | AC | 85 ms | 5640 KiB |
| 03_corner_2_01.txt | AC | 85 ms | 5532 KiB |
| 03_corner_2_02.txt | AC | 89 ms | 5612 KiB |
| 03_corner_2_03.txt | AC | 89 ms | 5532 KiB |
| 04_corner_3_00.txt | AC | 0 ms | 1628 KiB |
| 04_corner_3_01.txt | AC | 0 ms | 1528 KiB |
| 04_corner_3_02.txt | AC | 0 ms | 1648 KiB |
| 04_corner_3_03.txt | AC | 0 ms | 1624 KiB |
| 04_corner_3_04.txt | AC | 0 ms | 1624 KiB |
| 04_corner_3_05.txt | AC | 0 ms | 1620 KiB |
| 04_corner_3_06.txt | AC | 0 ms | 1592 KiB |
| 04_corner_3_07.txt | AC | 0 ms | 1568 KiB |
| 04_corner_3_08.txt | AC | 0 ms | 1640 KiB |
| 04_corner_3_09.txt | AC | 0 ms | 1628 KiB |
| 05_corner_4_00.txt | AC | 94 ms | 5496 KiB |
| 05_corner_4_01.txt | AC | 93 ms | 5636 KiB |
| 06_corner_5_00.txt | AC | 1 ms | 1600 KiB |
| 06_corner_5_01.txt | AC | 0 ms | 1628 KiB |
| 07_corner_6_00.txt | AC | 95 ms | 5564 KiB |
| 07_corner_6_01.txt | AC | 98 ms | 5656 KiB |
| 07_corner_6_02.txt | AC | 95 ms | 5648 KiB |
| 07_corner_6_03.txt | AC | 95 ms | 5504 KiB |
| 07_corner_6_04.txt | AC | 102 ms | 5628 KiB |
| 07_corner_6_05.txt | AC | 96 ms | 5628 KiB |
| 07_corner_6_06.txt | AC | 98 ms | 5656 KiB |
| 07_corner_6_07.txt | AC | 96 ms | 5496 KiB |
| 07_corner_6_08.txt | AC | 97 ms | 5528 KiB |
| 07_corner_6_09.txt | AC | 97 ms | 5552 KiB |