結果
| 問題 |
No.5009 Draw A Convex Polygon
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-12-03 05:51:56 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 1,030 ms / 2,600 ms |
| コード長 | 961 bytes |
| コンパイル時間 | 685 ms |
| 実行使用メモリ | 27,764 KB |
| スコア | 1,000,000 |
| 平均クエリ数 | 1000001.00 |
| 最終ジャッジ日時 | 2022-12-03 05:52:00 |
| 合計ジャッジ時間 | 3,684 ms |
|
ジャッジサーバーID (参考情報) |
judge16 / judge11 |
| 純コード判定しない問題か言語 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 1 |
ソースコード
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int gcd(int a,int b)
{
while(b)
{
int t=a%b;
a=b;
b=t;
}
return a;
}
int main()
{
vector<pair<int,int> >A;
for(int T=2;A.size()<250000;T++)for(int x=1;A.size()<250000&&x<T;x++)
{
int y=T-x;
if(gcd(x,y)==1)A.push_back(make_pair(x,y));
}
sort(A.begin(),A.end(),[](pair<int,int>l,pair<int,int>r){
return (long)l.first*r.second-(long)l.second*r.first>0;
});
int sy=0;
for(pair<int,int>p:A)sy+=p.second;
vector<pair<int,int> >ans;
ans.push_back(make_pair(0,-sy));
for(pair<int,int>p:A)ans.push_back(make_pair(ans.back().first+p.first,ans.back().second+p.second));
{
int n=ans.size();
for(int i=n-2;i>=0;i--)ans.push_back(make_pair(ans[i].first,-ans[i].second));
}
{
int n=ans.size();
for(int i=n-2;i>0;i--)ans.push_back(make_pair(-ans[i].first,ans[i].second));
}
cout<<ans.size()<<"\n";
for(pair<int,int>p:ans)cout<<p.first<<" "<<p.second<<"\n";
}