全WA又玄关了 求捞 跪谢
查看原帖
全WA又玄关了 求捞 跪谢
1082583
allyears楼主2024/5/23 22:00
#include<bits/stdc++.h>


#define ll long long 


using namespace std;
const ll N=1e6+10;
const ll MOD=1e9 + 7;
ll n,ans;
ll a[N];
struct z// 记录可配对的木棒 
{
	ll X,D;
	#define X(i) MM[i].X
	#define D(i) MM[i].D
}MM[N];

int main()
{
//	freopen("p.in","r",stdin);
//	freopen("ans.out","w",stdout);
	
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	
	sort(a+1,a+n+1);// 从小到大排序方便找 
	
	ll js=2,t=0;// t记录对数  js提高效率 
	for(int i=1;i<=n;i++)
	{
		int pd=0;//判断是否可配对 
		for(int j=js;j<=n;j++)// js 表示上一对的结束位置 因为从小到大排 
		{// 第二队 的长木棒比上一对的长 所以从上队结束位置开始 
			if(a[j]==a[i]*2)
			{
				if(pd==0) t++;// 对数加 一 
				D(t)++; //如果满足 该对长木棒加 
				js=j;
				pd=1;
			}
			else if(pd==1) break;// 排过序 所以该对的长木棒是连续的 
		}
		if(pd==1)// 找短木棒的个数 
		{
			for(int k=i;k<=n;k++) 
			{
				if(a[i]==a[k]) X(t)++,i++;//同样连续的 
				else break;
			}
		}	
	}
	for(int i=1;i<=t;i++)
	{
		if(D(i)>=2&&X(i)>=2)// 小于两个不能组合 
		{
			ans+=(((D(i)*(D(i)-1))/2)  *  (X(i)*(X(i)-1)/2))%MOD;
		}
		ans%=MOD;
	}
	cout<<ans%MOD<<endl;
	return 0;
 } 
2024/5/23 22:00
加载中...