这道题的解为什么不是对称的?
查看原帖
这道题的解为什么不是对称的?
377449
zjq123victorW楼主2023/5/21 15:17

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循环里的部分以及输出, 为什么第二份代码错了?

2023/5/21 15:17
加载中...