洛谷 - P1142 - 轟炸 - 計算幾何
阿新 • • 發佈:2019-01-30
style auto print bits 一個 中一 amp cout show
https://www.luogu.org/problemnew/show/P1142
枚舉一個基點,枚舉另一個點找出斜率,約分後存入。記得要加上那個點本身。
__gcd(x,y),返回值符號與y的符號相同。當x,y其中一個是0的時候,返回值是另一個。
所以根本不用特判直接除以g!
#include<bits/stdc++.h> using namespace std; #define ll long long int n; ll x[705],y[705]; map<pair<ll,ll> ,ll>m; void reduction(ll &y,ll &x){//if(x==0) //y=1; //if(y==0) //x=1; ll g=__gcd(y,x); y/=g; x/=g; /*if(x<0){ y=-y; x=-x; }*/ //cout<<g<<endl; } int main(){ scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%lld%lld",&x[i],&y[i]); } ll maxnum=0; for(int i=0;i<n;i++){ m.clear(); for(int j=0;j<n;j++){ if(j==i) continue; else{ ll dy=y[j]-y[i]; ll dx=x[j]-x[i]; reduction(dy,dx); m[{dy,dx}]++; } } ll tmax=0; for(auto i:m){ tmax=max(tmax,i.second); } maxnum=max(maxnum,tmax+1); } printf("%lld\n",maxnum); //cout<<__gcd(0,2)<<endl; //cout<<__gcd(1,0)<<endl; }
洛谷 - P1142 - 轟炸 - 計算幾何