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;
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#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
AC × 3
AC × 45
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


2025-09-19 (Fri)
07:10:38 +09:00