首页 > 其他 > 详细

2020 CCPC比赛

时间:2020-02-10 19:14:26      阅读:224      评论:0      收藏:0      [点我收藏+]

https://ac.nowcoder.com/acm/contest/4010/A

这道题枚举区间长度的贡献值;

当区间长度为1时,就是所有元音数的个数;

当区间长度为2时,区间【2,n-1】的数贡献了两次;

以此类推;

那么为什么可以这样做呢。

举个例子:当区间长度为2时,答案就是 (该区间元音个数)/区间长度+(该区间元音个数)/区间长度+(该区间元音个数)/区间长度+·······;

      化简式子,就能得出,(区间总的元音个数/区间长度)就是当区间长度为2时的答案;

于是我们需要枚举出区间长度为1~n时的各个答案;

最后算出来的答案再除以总的枚举个数(n*(n+1)/2);

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N = 1000005;
 4 int n;
 5 char str[N];
 6 int a[N];
 7 
 8 int main() {
 9     scanf("%s",str+1);
10     n=strlen(str+1);
11     for(int i=1;i<=n;i++) {
12         if(str[i]==a || str[i]==e || str[i]==i
13            || str[i]==o || str[i]==u || str[i]==y)
14             a[i]=a[i-1]+1;
15         else a[i]=a[i-1];
16     }
17     double ans = 0;
18     double tmp = 0;
19     for(int i=1;i<=n;i++){
20         if(i==1) tmp=a[n];
21         else tmp+=a[n-i+1]-a[i-1];
22         ans += tmp/i;
23     }
24     printf("%.8lf",ans/n/(n+1)*2);
25 }

 

2020 CCPC比赛

原文:https://www.cnblogs.com/pangbi/p/12291938.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!