1 条题解

  • 0
    @ 2025-8-24 22:45:11

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 2081a
    过去无法挽回,未来仍可改变

    搬运于2025-08-24 22:45:11,当前版本为作者最后更新于2023-11-07 14:37:25,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    P9078 Język polski 题解

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

    思路

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

    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;
    }
    
    • 1

    信息

    ID
    8366
    时间
    250ms
    内存
    256MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者