比赛 |
“Asm.Def战记之夏威夷”杯 |
评测结果 |
AAAAAAATTT |
题目名称 |
Asm.Def的验证码 |
最终得分 |
70 |
用户昵称 |
devil |
运行时间 |
3.053 s |
代码语言 |
C++ |
内存使用 |
2.00 MiB |
提交时间 |
2015-11-06 09:21:40 |
显示代码纯文本
#include <cstdlib>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <stack>
#include <vector>
#include <map>
#include <queue>
#include <ctime>
#include <algorithm>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef unsigned int uint;
const int inf=1061109567;
const int maxn=100010;
const int maxm=110;
const int mod=1000000007;
const double pi=3.14;
int a[maxn];
int f[maxn];
int g[maxn];
int fnt[maxn];
int lst[maxn];
int main()
{
freopen("asm_code.in","r",stdin);
freopen("asm_code.out","w",stdout);
//clock_t st=clock();
int n;scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
f[i]=f[i-1];g[i]=g[i-1];
if(a[i]==1) f[i]++;
else g[i]++;
}
for(int i=1;i<=n;i++)
{
if(a[i]==1) fnt[i]=g[i],lst[i]=g[n]-g[i];
else fnt[i]=f[i],lst[i]=f[n]-f[i];
}
ll ans=0,tmp;int cnt;
for(int i=1;i<=n;i++)
{
if(a[i]==2) continue;
cnt=0;
for(int j=i+1;j<=n;j++)
{
if(a[j]==2) cnt++;
else
{
tmp=(cnt*((fnt[i]+lst[j])%mod))%mod;
ans=(ans+tmp)%mod;
}
}
}
printf("%lld\n",ans);
//clock_t ed=clock();
//printf("\nTime used : %.5lf Ms\n",double(ed-st)/CLOCKS_PER_SEC);
return 0;
}