結果
問題 | No.202 1円玉投げ |
ユーザー |
![]() |
提出日時 | 2023-10-21 03:13:50 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 3,177 ms / 5,000 ms |
コード長 | 1,167 bytes |
コンパイル時間 | 1,310 ms |
コンパイル使用メモリ | 130,432 KB |
最終ジャッジ日時 | 2025-02-17 12:10:38 |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 38 |
ソースコード
#include<iostream> #include<vector> #include<algorithm> #include<cstring> #include<cassert> #include<cmath> #include<ctime> #include<iomanip> #include<numeric> #include<stack> #include<queue> #include<map> #include<unordered_map> #include<set> #include<unordered_set> #include<bitset> #include<random> using namespace std; void solve() { int N; cin >> N; set<pair<int,int>> S; set<int> X; for(int i = 0;i < N;i++) { int x,y; cin >> x >> y; bool fn = false; for(int i = -19;i < 20;i++) { int nx = x+i; if(!X.count(nx)) continue; int ok = y,ng = y+30; while(ng-ok > 1) { int mid = (ok+ng)/2; if(i*i + (mid-y)*(mid-y) < 400) ok = mid; else ng = mid; } int uy = ok; ok = y,ng = y-30; while(ok-ng > 1) { int mid = (ok+ng)/2; if(i*i + (mid-y)*(mid-y) < 400) ok = mid; else ng = mid; } int ly = ok; for(int j = ly;j <= uy;j++) if(S.count(make_pair(nx,j))) fn = true; if(fn) break; } if(fn) continue; S.insert(make_pair(x,y)); X.insert(x); } cout << S.size() << endl; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int tt = 1; //cin >> tt; while(tt--) solve(); }