結果
問題 | No.5009 Draw A Convex Polygon |
ユーザー | kotatsugame |
提出日時 | 2022-12-03 05:51:56 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.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 |
純コード判定しない問題か言語 |
(要ログイン)
ソースコード
#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"; }