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; }