《论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!!!