D. Divisible Pairs

原题链接

题解

  • 如果 \((a_i+a_j)\ mod\ x==0\) 那么 \((a_i\ mod\ x+a_j\ mod\ x)\ mod\ x==0\)
  • 如果 \((a_i-a_j)\ mod\ y==0\) 那么 \(a_i\ mod\ y==a_j\ mod\ y\)

所以我们可以把每个 \(a\) 的求模情况存下来, \(a[i]\) 的贡献为其前面的 \(a\) 出现的对应求模情况数量

\(code\)

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n,x,y;
        cin>>n>>x>>y;

        long long ans=0;
        map<int,map<int,int>> q;
        for(int i=1;i<=n;i++)
        {
            int a;
            cin>>a;
            ans+=q[(x-a%x)%x][a%y];
            q[a%x][a%y]++;
        }
        cout<<ans<<endl;
    }
    return 0;
}

posted @ 2024-02-19 18:44  纯粹的  阅读(56)  评论(0)    收藏  举报