| 比赛 | 
    “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;
}