比赛 “Asm.Def战记之夏威夷”杯 评测结果 AAAAAAATTT
题目名称 Asm.Def的验证码 最终得分 70
用户昵称 devil 运行时间 3.053 s
代码语言 C++ 内存使用 2.00 MiB
提交时间 2015-11-06 09:21:40
显示代码纯文本
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <cmath>
  6. #include <map>
  7. #include <stack>
  8. #include <vector>
  9. #include <map>
  10. #include <queue>
  11. #include <ctime>
  12. #include <algorithm>
  13. using namespace std;
  14. typedef long long ll;
  15. typedef unsigned long long ull;
  16. typedef long double ld;
  17. typedef unsigned int uint;
  18. const int inf=1061109567;
  19. const int maxn=100010;
  20. const int maxm=110;
  21. const int mod=1000000007;
  22. const double pi=3.14;
  23.  
  24. int a[maxn];
  25. int f[maxn];
  26. int g[maxn];
  27. int fnt[maxn];
  28. int lst[maxn];
  29.  
  30. int main()
  31. {
  32. freopen("asm_code.in","r",stdin);
  33. freopen("asm_code.out","w",stdout);
  34. //clock_t st=clock();
  35. int n;scanf("%d",&n);
  36. for(int i=1;i<=n;i++)
  37. {
  38. scanf("%d",&a[i]);
  39. f[i]=f[i-1];g[i]=g[i-1];
  40. if(a[i]==1) f[i]++;
  41. else g[i]++;
  42. }
  43. for(int i=1;i<=n;i++)
  44. {
  45. if(a[i]==1) fnt[i]=g[i],lst[i]=g[n]-g[i];
  46. else fnt[i]=f[i],lst[i]=f[n]-f[i];
  47. }
  48. ll ans=0,tmp;int cnt;
  49. for(int i=1;i<=n;i++)
  50. {
  51. if(a[i]==2) continue;
  52. cnt=0;
  53. for(int j=i+1;j<=n;j++)
  54. {
  55. if(a[j]==2) cnt++;
  56. else
  57. {
  58. tmp=(cnt*((fnt[i]+lst[j])%mod))%mod;
  59. ans=(ans+tmp)%mod;
  60. }
  61. }
  62. }
  63. printf("%lld\n",ans);
  64. //clock_t ed=clock();
  65. //printf("\nTime used : %.5lf Ms\n",double(ed-st)/CLOCKS_PER_SEC);
  66. return 0;
  67. }