ac代码
ty long long ll;
int n;
pair<int,int> a[N];
map<pair<int,int> ,int> mp;
int gcd(int x,int y){
if(x==0||y==0)return max(x,y);
if(x>y)return gcd(y,x%y);
return gcd(x,y%x);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i].first>>a[i].second;
ll ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(j==i)continue;
int x=abs(a[i].first-a[j].first),y=abs(a[i].second-a[j].second);
int dx=(a[i].first-a[j].first)>0? 1:-1,dy=(a[i].second-a[j].second)>0? 1:-1;
int arr=gcd(x,y);
// cout<<x*dx/arr<<' '<<y*dy/arr<<endl;
if(mp[make_pair(x*dx/arr,y*dy/arr)]==0){
mp[make_pair(x*dx/arr,y*dy/arr)]=1,ans++;
}
}
}
cout<<ans;
return 0;
}
错误代码:
ty long long ll;
int n;
pair<int,int> a[N];
map<pair<int,int> ,int> mp;
int gcd(int x,int y){
if(x==0||y==0)return max(x,y);
if(x>y)return gcd(y,x%y);
return gcd(x,y%x);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i].first>>a[i].second;
ll ans=0;
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
int x=abs(a[i].first-a[j].first),y=abs(a[i].second-a[j].second);
int dx=(a[i].first-a[j].first)>0? 1:-1,dy=(a[i].second-a[j].second)>0? 1:-1;
int arr=gcd(x,y);
// cout<<x*dx/arr<<' '<<y*dy/arr<<endl;
if(mp[make_pair(x*dx/arr,y*dy/arr)]==0){
mp[make_pair(x*dx/arr,y*dy/arr)]=1,ans++;
}
}
}
cout<<ans*2;
return 0;
}
两份代码的区别是双重for循环里的部分以及输出, 为什么第二份代码错了?