求i

https://community.topcoder.com/stat?c=problem_statement&pm=13951接

题意:

给定一个含有N(N<=1000)个元素的数组w 求有多少四元组(i,j,p,q)满足

 

i

w[i]×w[p]=w[j]×w[q]

题解

为了方便我们令a=w[i] b=w[j] c=w[p] d=w[q]

我们先来枚举ab 那么问题就变成了有多少对(c,d)满足条件

a×c=b×d

于是 a/b=d/c

于是我们可以枚举a,b,查找后面有多少个数对满足条件啦!

具体实现和CF 325 D题很像,用个map就好啦

map,int> mp;
long long ans=0;
int i,j,k,r;
int gcd(int a,int b)
{
    while(b!=0)
    {
        int y=b;
        b=a%b;
        a=y;
    }
    return a;
}
class BearDarts {
    public:
    long long count(vector w) {
        mp.clear();
        int n=w.size();
        ans=0;
        for(int j=n-3;j>0;j--)
        {
            int k=j+1;
            for(int r=j+2;r pp={w[i]/gg,w[j]/gg};
                if(mp.count(make_pair(w[i]/gg,w[j]/gg)))
                {
                    // cout<


你可能感兴趣的:(STL)