結果
| 問題 | No.2355 Unhappy Back Dance |
| コンテスト | |
| ユーザー |
umezo
|
| 提出日時 | 2023-06-16 22:41:13 |
| 言語 | C++17(gcc12) (gcc 12.4.0 + boost 1.90.0) |
| 結果 |
AC
|
| 実行時間 | 3,406 ms / 6,000 ms |
| コード長 | 1,843 bytes |
| 記録 | |
| コンパイル時間 | 6,988 ms |
| コンパイル使用メモリ | 483,268 KB |
| 実行使用メモリ | 355,712 KB |
| 最終ジャッジ日時 | 2026-07-01 06:38:54 |
| 合計ジャッジ時間 | 50,718 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 37 |
ソースコード
#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define ALL(v) v.begin(),v.end()
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <boost/multiprecision/cpp_int.hpp>
namespace mp = boost::multiprecision;
using ll = mp::cpp_int;
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int n;
cin>>n;
vector<ll> X(n),Y(n);
rep(i,n) cin>>X[i]>>Y[i];
vector<pair<ll,ll>> P(n);
rep(i,n) P[i]={X[i],Y[i]};
sort(ALL(P));
map<ll,set<int>> m1,m2;
rep(i,n){
m1[X[i]].insert(i);
m2[Y[i]].insert(i);
}
set<int> ANS;
for(auto [a,b]:m1){
if(b.size()>3){
for(auto x:b) ANS.insert(x);
}
else if(b.size()==3){
vector<int> T;
for(auto x:b) T.push_back(x);
ANS.insert(T[0]);
ANS.insert(T[2]);
}
}
for(auto [a,b]:m2){
if(b.size()>3){
for(auto x:b) ANS.insert(x);
}
else if(b.size()==3){
vector<int> T;
for(auto x:b) T.push_back(x);
ANS.insert(T[0]);
ANS.insert(T[2]);
}
}
map<pair<pair<ll,ll>,pair<ll,ll>>,set<int>> m3;
for(int i=0;i<n;i++){
ll xi=P[i].first,yi=P[i].second;
for(int j=i+1;j<n;j++){
ll xj=P[j].first,yj=P[j].second;
if(xi==xj || yi==yj) continue;
ll dx=xi-xj,dy=yi-yj;
if(dx<0) dx=-dx,dy=-dy;
ll g=gcd(dx,dy);
dx/=g,dy/=g;
ll da=xi*yj-xj*yi,db=xi-xj;
if(db<0) da=-da,db=-db;
ll gg=gcd(da,db);
da/=gg,db/=gg;
m3[{{dx,dy},{da,db}}].insert(i);
m3[{{dx,dy},{da,db}}].insert(j);
}
}
for(auto [a,b]:m3){
if(b.size()>3){
for(auto x:b) ANS.insert(x);
}
else if(b.size()==3){
vector<int> T;
for(auto x:b) T.push_back(x);
ANS.insert(T[0]);
ANS.insert(T[2]);
}
}
cout<<ANS.size()<<endl;
return 0;
}
umezo