考虑余数来处理就行了
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
typedef long long ll;
ll a[N];
ll cnt[210];
int n;
ll res;
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
ll x;
cin>>x;
a[i] = x;
res+=cnt[x%200];
cnt[x%200]++;
}
cout<<res<<endl;
}
直接排序然后模拟
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+10;
ll n,k;
struct Node{
ll a,b;
bool operator<(const Node&w)const{
return a<w.a;
}
}node[N];
int main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>node[i].a>>node[i].b;
ll st = 0;
sort(node+1,node+1+n);
for(int i=1;i<=n;i++){
// printf("gaga%lld %lld\n",k,st);
ll tem = node[i].a;
ll distance = tem-st;
if(k<distance)break;
st = tem;
k-=distance;
k += node[i].b;
// printf("gaga%lld %lld\n",k,st);
}
//printf("%lld\n",k);
if(k)st+=k;
printf("%lld\n",st);
}
没啥意思,开桶模拟
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n;
int a[N],b[N],c[N];
int cnt[N];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++)cin>>b[i];
for(int i=1;i<=n;i++){
cin>>c[i];
cnt[b[c[i]]]++;
}
long long res = 0;
for(int i=1;i<=n;i++){
res+=cnt[a[i]];
}
cout<<res<<endl;
}