AC日记——妖梦拼木棒 洛谷 P3799

妖梦拼木棒

 

思路:

  神特么题;

 

代码:

#include <bits/stdc++.h>
using namespace std;
#define mod 1000000007LL
int n,m;
long long ai[5005],ans;
inline void in(int &now)
{
    char Cget=getchar();now=0;
    while(Cget>'9'||Cget<'0')Cget=getchar();
    while(Cget>='0'&&Cget<='9')
    {
        now=now*10+Cget-'0';
        Cget=getchar();
    }
}
int main()
{
    in(n);int pos;
    for(int i=1;i<=n;i++) in(pos),ai[pos]++;
    for(int i=1;i<=5000;i++)
    {
        for(int v=i;v<=5000;v++)
        {
            if(i+v>5000) break;
            if(i==v)
            {
                if(ai[i]>=2&&ai[i<<1]>=2)
                    ans=(ans+(ai[i]*(ai[v]-1)/2%mod)*(ai[i<<1]*(ai[i<<1]-1)/2%mod))%mod;
            }
            else
            {
                if(ai[i]>=1&&ai[v]>=1&&ai[i+v]>=2)
                    ans=(ans+((ai[i]*ai[v])%mod)*(ai[i+v]*(ai[i+v]-1)/2%mod))%mod;
            }
        }
    }
    cout<<ans;
    return 0;
}

 

posted @ 2017-06-10 17:12  IIIIIIIIIU  阅读(349)  评论(0编辑  收藏  举报