P9078题解

· · 题解

P9078 Język polski 题解

看大佬们都提交的 string 字符串,我来交一发 char 代码。

思路

从头开始遍历一遍字符串,分别给元音和辅音开一个累加器,满足是元音就清空辅音,元音加一;反之清空元音,辅音加一,如果其中有一个满足了题目的条件,就让 sum 的值变成当前 i-2(举例:aei只能算一个满足条件的,在 i=3y=3,因此 sum 的值改为 i-2=1),再设 ans 变量每轮累加 sum 最终得到答案。

AC代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=200010;//范围开始开小了调了好久都是70分
ll f,y,sum;
ll ans;
int read(){
    int op=1,x=0;
    char c=getchar();
    while(!isdigit(c)){
        if(c=='-') op=-1;
        c=getchar();
    }
    while(isdigit(c)){
        x=x*10+c-'0';
        c=getchar();
    }
    return op*x;
}//快读,本题用不到
bool check(char c){
    return (c=='a'||c=='e'||c=='i'||c=='o'||c=='u'||c=='y');
}//判断当前字母是否是元音,是返回true,否则返回false
char s[N];
int main(){
    scanf("%s",s+1);
    int len=strlen(s+1);
    for(int i=1;i<=len;i++){
        if(check(s[i])){//判断如果是元音就让元音累加器加1,辅音累加器清空
            y++;
            f=0;
        }
        else{//如果是辅音与上面相反
            f++;
            y=0;
        }
        if(f>=3||y>=3)//如果其中有一个满足题意达到三就让sum改为i-2
            sum=i-2;
        ans+=sum; 
    }
    printf("%lld\n",ans);
    return 0;
}