結果
問題 | No.1041 直線大学 |
ユーザー |
![]() |
提出日時 | 2020-05-01 22:10:21 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 3 ms / 2,000 ms |
コード長 | 3,220 bytes |
コンパイル時間 | 1,356 ms |
コンパイル使用メモリ | 168,756 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-16 07:54:32 |
合計ジャッジ時間 | 2,339 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 37 |
ソースコード
#include<bits/stdc++.h>#define lint long long int#define rep(i,n) for(int i=0;i<int(n);i++)#define per(i,n) for(int i=n-1;i>=0;i--)#define arep(i,a,n) for(int i=a;i<n;i++)#define sort(a) sort(a.begin(),a.end())#define reverse(a) reverse(a.begin(),a.end())#define fill(a,x) fill(a.begin(),a.end(),x)#define eb(data) emplace_back(data)#define pb(data) emplace_back(data)#define mp make_pair#define ALNUM 26#define vint vector<int>#define F first#define S second#define ALL(data) data.begin(),data.end()#define GEts(s) getline(cin,s);using namespace std;template<typename Rast>inline void out(Rast rast){cout<<rast<<"\n";return;}template<typename Rast>inline void in(Rast& rast){cin>>rast;return;}template<typename T>istream& operator >> (istream& is, vector<T>& vec){for(T& x: vec) is >> x;return is;}template<typename First, typename... Rest>void in(First& first, Rest&... rest){cin >> first;in(rest...);return;}template<typename First, typename... Rest>void out(First first, Rest... rest){cout << first<<" ";out(rest...);return;}template<typename T>T gcd(T a,T b){if(b==0)return a;return gcd(b,a%b);}template<typename T1,typename T2>bool chmax(T1& a,T2 b){if(a<b){a=b;return true;}else{return false;}}template<typename T1,typename T2>bool chmin(T1& a,T2 b){if(a>b){a=b;return true;}else{return false;}}template<typename T>T lcm(T a, T b){return a * b / gcd(a, b);}static const double pi = 3.141592653589793;lint modpow(lint a,lint n,lint p){if(n==1)return a%p;if(n%2==1)return (a*modpow(a,n-1,p))%p;lint t=modpow(a,n/2,p);return (t*t)%p;}//a^n%plint MOD=pow(10,9)+7;//lint MOD=998244353;lint inf=pow(2,50);int intinf=pow(2,30);/**/int dirx[]={1,0};int diry[]={0,1};//*///右、下/**int dirx[]={0,1,0,-1};int diry[]={-1,0,1,0};//*///四方位/**int dirx[]={-1,0,1,1,1,0,-1,-1};int diry[]={-1,-1,-1,0,1,1,1,0};//*///八方位class unionfind{public:vector<int> table;vector<int> wod;void init(int size){table.resize(size);wod.resize(size);rep(i,size)table[i]=i,wod[i]=i;};int root(int index){if(table[index]==index)return index;else{int hoge=root(table[index]);table[index]=hoge;return hoge;}};bool same(int x,int y){return(root(x)==root(y));};int marge(int x,int y){int yroot=root(y);int xroot=root(x);if(xroot==yroot)return 0;table[yroot]=xroot;return 0;}};int main(){cin.tie(0);ios::sync_with_stdio(false);cout<<std::fixed<<std::setprecision(12);int n;in(n);int x[n],y[n];int flg[102][102];memset(flg,0,sizeof(flg));rep(i,n){in(x[i],y[i]);flg[y[i]][x[i]]=1;}int ans=0;rep(i,n){rep(j,n){int hoge=0;//iからjに向かって線をひいてその延長線上にあるやつを数えるif(i==j)continue;int dx=x[j]-x[i];int dy=y[j]-y[i];//out(i,j,dy,dx);if(dy==0)dx=1;if(dx==0)dy=1;if(dx!=0&&dy!=0){int are=gcd(abs(dy),abs(dx));dy/=are;dx/=are;}int count=0;while(dy*count+y[i]<=100&&dx*count+x[i]<=100&&0<=dy*count+y[i]&&0<=dx*count+x[i]){//0以上100以下if(flg[dy*count+y[i]][dx*count+x[i]]==1)hoge++;//out(i,dy*count+y[i],dx*count+x[i]);count++;}chmax(ans,hoge);}}out(ans);return 0;}