結果
| 問題 |
No.5009 Draw A Convex Polygon
|
| コンテスト | |
| ユーザー |
MasKoaTS
|
| 提出日時 | 2022-12-02 11:12:50 |
| 言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.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 |
| 純コード判定しない問題か言語 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 1 |
ソースコード
#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;
}
MasKoaTS