結果

問題 No.5009 Draw A Convex Polygon
ユーザー MasKoaTSMasKoaTS
提出日時 2022-12-02 11:12:50
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 1,984 ms / 2,600 ms
コード長 1,186 bytes
コンパイル時間 3,113 ms
実行使用メモリ 45,324 KB
スコア 1,000,000
平均クエリ数 979005.00
最終ジャッジ日時 2022-12-02 11:12:59
合計ジャッジ時間 7,986 ms
ジャッジサーバーID
(参考情報)
judge12 / judge14
純コード判定しない問題か言語
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1,984 ms
45,324 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#pragma GCC target("avx2")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#pragma warning(disable: 4996)

#include <bits/stdc++.h>
using namespace std;
template <class T>
using V = vector<T>;


int gcd(int a, int b) {
	a = abs(a);	b = abs(b);
	while (b != 0) {
		int r = a % b;
		a = b;
		b = r;
	}
	return a;
}

int area(const V<int>& v1, const V<int>& v2) {
	int x1 = v1[0], y1 = v1[1];
	int x2 = v2[0], y2 = v2[1];
	return (x1 * y2 - x2 * y1);
}

bool arg_sort(const V<int>& v1, const V<int>& v2) {
	return area(v1, v2) > 0;
}


int main(void) {
	V<V<int> > vec = { {1,0} };
	int n = 642, m = 500000;
	for (int i = 1; i < n; ++i) {
		for (int j = 1; j < n; ++j) {
			if (gcd(j, i) > 1) {
				continue;
			}
			vec.push_back({ j,i });
			vec.push_back({ j,-i });
		}
	}

	int N = vec.size();
	if (N > m) {
		vec.resize(m);
		N = m;
	}
	sort(vec.begin(), vec.end(), arg_sort);

	int M = 1000000000;
	int x = -M, y = 0;
	printf("%d\n", N << 1);
	fflush(stdout);

	for (V<int> v : vec) {
		x += v[0];	y += v[1];
		printf("%d %d\n", x, y);
		fflush(stdout);
	}
	for (V<int> v : vec) {
		x -= v[0];	y -= v[1];
		printf("%d %d\n", x, y);
		fflush(stdout);
	}

	return 0;
}
0