codeForces 509E 想法题

本文介绍了一种计算字符串中元音比例总和的方法,并提供了一个具体的算法实现。通过计算字符串所有子串中元音字母的比例,来衡量一个歌曲标题的“美”。文章详细解释了算法思路并给出了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Pretty Song

time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
When Sasha was studying in the seventh grade, he started listening to music a lot. In order to evaluate which songs he likes more, he introduced the notion of the song’s prettiness. The title of the song is a word consisting of uppercase Latin letters. The prettiness of the song is the prettiness of its title.

Let’s define the simple prettiness of a word as the ratio of the number of vowels in the word to the number of all letters in the word.

Let’s define the prettiness of a word as the sum of simple prettiness of all the substrings of the word.

More formally, let’s define the function vowel(c) which is equal to 1, if c is a vowel, and to 0 otherwise. Let si be the i-th character of string s, and si..j be the substring of word s, staring at the i-th character and ending at the j-th character (sisi + 1… sj, i ≤ j).

Then the simple prettiness of s is defined by the formula:

The prettiness of s equals

Find the prettiness of the given song title.

We assume that the vowels are I, E, A, O, U, Y.

Input
The input contains a single string s (1 ≤ |s| ≤ 5· 105 ) — the title of the song.

Output
Print the prettiness of the song with the absolute or relative error of at most 106 .

Examples

input
IEAIAIO

output
28.0000000

input
BYOB

output
5.8333333

input
YISVOWEL

output
17.0500000

Note
In the first sample all letters are vowels. The simple prettiness of each substring is 1. The word of length 7 has 28 substrings. So, the prettiness of the song equals to 28.

题目链接

题意:给你一个字符串,定义元音字母为I, E, A, O, U, Y,求这个字符串中所有子串中元音占的比例的总和。

解题思路:我们可以发现长度为2的子串中第一个和最后一个字母出现的次数为1,其他为2,同理发现长度为3的子串中第一个和最后一个字母出现的次数为1,第二个和最后第二个字母出现的次数为2,其他为3,所以若长度为i-1的字符串中元音字母出现的个数为q[i-1],则我们可以得到q[i]=q[i-1]+p[l-i+1]-p[i-1],其中p数组为前n项元音字母的个数。最后ans=q[1]/1+q[2]/2…….q[len]/len(len为字符串的总长)

#include<cstdio>
#include<cstring>
#define maxn 500005
typedef long long ll; 
char st[maxn];
ll p[maxn],q[maxn];
double ans;
int main(){
    scanf("%s",st+1);
    ll l=strlen(st+1);
    for(ll i=1;i<=l;i++){
        if(st[i]=='I'||st[i]=='E'||st[i]=='A'||st[i]=='O'||st[i]=='U'||st[i]=='Y')  p[i]=p[i-1]+1;
        else p[i]=p[i-1];
    }
    q[0]=0;
    for(ll i=1;i<=l;i++){
        q[i]=q[i-1]+p[l-i+1]-p[i-1];
        ans+=q[i]/(double)i;
    }
    printf("%.7lf\n",ans);
    return 0;
}
### Codeforces 887E Problem Solution and Discussion The problem **887E - The Great Game** on Codeforces involves a strategic game between two players who take turns to perform operations under specific rules. To tackle this challenge effectively, understanding both dynamic programming (DP) techniques and bitwise manipulation is crucial. #### Dynamic Programming Approach One effective method to approach this problem utilizes DP with memoization. By defining `dp[i][j]` as the optimal result when starting from state `(i,j)` where `i` represents current position and `j` indicates some status flag related to previous moves: ```cpp #include <bits/stdc++.h> using namespace std; const int MAXN = ...; // Define based on constraints int dp[MAXN][2]; // Function to calculate minimum steps using top-down DP int minSteps(int pos, bool prevMoveType) { if (pos >= N) return 0; if (dp[pos][prevMoveType] != -1) return dp[pos][prevMoveType]; int res = INT_MAX; // Try all possible next positions and update 'res' for (...) { /* Logic here */ } dp[pos][prevMoveType] = res; return res; } ``` This code snippet outlines how one might structure a solution involving recursive calls combined with caching results through an array named `dp`. #### Bitwise Operations Insight Another critical aspect lies within efficiently handling large integers via bitwise operators instead of arithmetic ones whenever applicable. This optimization can significantly reduce computation time especially given tight limits often found in competitive coding challenges like those hosted by platforms such as Codeforces[^1]. For detailed discussions about similar problems or more insights into solving strategies specifically tailored towards contest preparation, visiting forums dedicated to algorithmic contests would be beneficial. Websites associated directly with Codeforces offer rich resources including editorials written after each round which provide comprehensive explanations alongside alternative approaches taken by successful contestants during live events. --related questions-- 1. What are common pitfalls encountered while implementing dynamic programming solutions? 2. How does bit manipulation improve performance in algorithms dealing with integer values? 3. Can you recommend any online communities focused on discussing competitive programming tactics? 4. Are there particular patterns that frequently appear across different levels of difficulty within Codeforces contests?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值