疑惑,为什么计算方式不一样结果是错的?
  • 板块P1102 A-B 数对
  • 楼主uberking
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/5/2 12:08
  • 上次更新2023/10/23 16:56:13
查看原帖
疑惑,为什么计算方式不一样结果是错的?
781515
uberking楼主2023/5/2 12:08

未过代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
unordered_map<LL,LL> Hash;	
LL n,m,ans;

int main(){
	scanf("%lld%lld",&n,&m);
	
	for(int i=1;i<=n;i++){
		LL a;
		scanf("%lld",&a);
		Hash[a]++;
		//cout<<Hash[a]<<endl;
	}
	
	for(auto it=Hash.begin();it!=Hash.end();it++){
		LL a=it->first;
		ans+=Hash[a+m]*Hash[a];
	}
	printf("%lld\n",ans);
	return 0;
}

改了之后AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=2e5+10;
unordered_map<int,int> Hash;	
int n,m,a[N]; 
LL ans;

int main(){
	scanf("%d%d",&n,&m);
	
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		Hash[a[i]]++;
		a[i]-=m;
	}
	
	for(int i=1;i<=n;i++)
		ans+=LL(Hash[a[i]]);
	printf("%lld\n",ans);
	return 0;
}
2023/5/2 12:08
加载中...