晶石候任!!!
查看原帖
晶石候任!!!
1080056
ShenShi_Yan楼主2025/2/3 15:37

《论30pts和AC的区别》——

30pts:

#include<bits/stdc++.h>
using namespace std;
int a,b;
unordered_map<long long,int> mp;
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	int n,m;
	cin>>n>>m;
	for(register int i=1;i<=n;++i){
		cin>>a;
		mp[a*i]++;
	}
	long long cnt=0;
	for(register int i=1;i<=m;++i){
		cin>>b;
		cnt+=(b?mp[b*i]:0);
	}
	cout<<cnt;
	return 0;
}

AcCode:

#include<bits/stdc++.h>
using namespace std;
unordered_map<long long,int> mp;
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	int n,m;
	cin>>n>>m;
	for(register int i=1;i<=n;++i){
		int a;
		cin>>a;
		mp[1ll*a*i]++;
	}
	long long cnt=0;
	for(register int i=1;i<=m;++i){
		int b;
		cin>>b;
		cnt+=(b?mp[1ll*b*i]:0);
	}
	cout<<cnt;
	return 0;
}

我把变量的位置改来改去,最后看了题解才知道是。。。两个int类型相乘如果超过longlong范围,而且没有开longlong的变量就会判定越界,所以像我12,18行这样的情况一定要乘上一个1LL(强制转longlong!!!

2025/2/3 15:37
加载中...