题目背景
上道题中,小 Y 斩了一地的木棒,现在她想要将木棒拼起来。
题目描述
有 n 根木棒,现在从中选 4 根,想要组成一个正三角形,问有几种选法?
答案对 109+7 取模。
输入格式
第一行一个整数 n。
第二行往下 n 行,每行 1 个整数,第 i 个整数 ai 代表第 i 根木棒的长度。
输出格式
一行一个整数代表答案。
输入输出样例
输入 #1复制
4 1 1 2 2
输出 #1复制
1
说明/提示
数据规模与约定
- 对于 30% 的数据,保证 n≤5×103。
- 对于 100% 的数据,保证 1≤n≤105,1≤ai≤5×103。
关于标题:因为一些不可抗力的原因,名称进行了更改。深表歉意。
C++代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
int tmp;
long long ans=0;
int counts[5005]={0};
cin>>n;
for(int i=1;i<=n;i++){
cin>>tmp;
counts[tmp]++;
}
for(int i=1;i<=2500;i++){
for(int j=i;j<=5000-i;j++){
int k1=counts[i];
int k2=counts[j];
int k3=counts[i+j];
if(k3>=2){
if(i==j&&k1>=2){
ans+=k1*(k1-1)/2*k3*(k3-1)/2;
}
if(i!=j&&k1>=1&&k2>=1){
ans+=k1*k2*k3*(k3-1)/2;
}
}
}
}
ans%=1000000007;
cout<<ans;
return 0;
}