比赛 “Asm.Def战记之夏威夷”杯 评测结果 AAAAAAAWWW
题目名称 Asm.Def的验证码 最终得分 70
用户昵称 mikumikumi 运行时间 0.115 s
代码语言 C++ 内存使用 1.31 MiB
提交时间 2015-11-06 11:10:36
显示代码纯文本
#include<cstdio>
#include<iostream>
using namespace std;
const int SIZEN=100010,MOD=1000000007;
typedef long long LL;
int N;
int sum[SIZEN]={0};
int H[SIZEN]={0};
int A[SIZEN]={0};
int tot=0;
LL ans=0;
void read()
{
	scanf("%d",&N);
	for(int i=1;i<=N;i++) scanf("%d",&A[i]);
	for(int i=1;i<=N;i++)
	{
		sum[i]=sum[i-1];
		if(A[i]!=A[N]) sum[i]++;
		else H[++tot]=i;
	}
	//for(int i=1;i<=tot;i++) cout<<H[i]<<" ";
}
void work()
{
	LL pos[SIZEN]={0};
	LL P[SIZEN]={0};
	//for(int i=1;i<=N;i++) cout<<sum[i]<<endl;
	for(int i=tot;i>=1;i--)
	{
		pos[i]=pos[i+1]+sum[H[i]];
		P[i]=P[i+1]+sum[H[i]]*sum[H[i]];
		pos[i]%=MOD;
		P[i]%=MOD;
	}
	//for(int i=1;i<=tot;i++) cout<<pos[i]<<" ";
	//cout<<endl;
	for(int i=1;i<tot;i++)
	{
		ans+=(LL)((sum[H[i]]+sum[N]))*pos[i+1]-(tot-i)*(sum[H[i]]+sum[N])*sum[H[i]]-P[i+1]+sum[H[i]]*pos[i+1];
		ans%=MOD;
	}
	printf("%lld",ans);
}
int main()
{
	freopen("asm_code.in","r",stdin);
	freopen("asm_code.out","w",stdout);
	read();
	work();
	return 0;
}