样例过了 0分 求助
查看原帖
样例过了 0分 求助
727352
_Eternally_楼主2023/7/26 15:28
//
//  main.cpp
//  妖梦拼木棒
//
//  Created  on 2023/7/25.
//

#include <iostream>
#include <algorithm>
#include <set>
#include <map>
using namespace std;
const int mod=1e9+7;

int T;
set<int>f;
set<int>S;
int a;
bool vs[50005];
int b[5005];
int c[5005][5005];
inline void build()
{
  c[0][0]=1;
  c[1][0]=c[1][1]=1;
  for(int i=2;i<=5000;i++)
  {
    c[i][0]=1;
    for(int j=1;j<=5000;j++)
    {
      c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
    }
  }
}
int main() {
    scanf("%d",&T);
    build();
//    cout<<c[2][2]<<"\n";
    for(int i=1;i<=T;i++){
        scanf("%d",&a);
        b[a]++;
        if(f.find(a)==f.end()){
            f.insert(a);
        }
        else{
            if(!vs[a])S.insert(a);
            vs[a]=true;
        }
    }
    long long ans=0;
    for(auto i:S){
//        cout<<i<<" "<<b[i]<<'\n';
        if(i%2||i<2||b[i]<2||(!(i>>1))||b[i>>1]<2)continue;
//        cout<<ans<<" "<<b[i]<<" "<<c[b[i]][2]<<" "<<(i>>1)<<" "<<b[i>>1]<<"\n";
        ans=(ans+c[b[i]][2]%mod*c[b[i>>1]][2]%mod)%mod;
    }
    printf("%lld",ans);
    return 0;
}


2023/7/26 15:28
加载中...