[Offer收割]编程练习赛46 register

Ended

Participants:142

Verdict:Accepted
Score:100 / 100
Submitted:2018-01-28 13:21:08

Lang:G++

Edit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
char s[1000000+5];
int dp[1000000+5][3][2];
int main(void){
    scanf("%s",s+1);
    int len=strlen(s+1);
    //aeiouaeiou
    for(int i=1;i<=len;++i){
        if(s[i]=='a'){
            dp[i][0][0]=dp[i-1][0][0]+1;
            dp[i][0][1]=dp[i-1][0][1]+1;
            for(int p=0;p<3;++p)
                for(int q=0;q<2;++q)
                    if(p!=0)dp[i][p][q]=dp[i-1][p][q];
        }else if(s[i]=='e'){
            dp[i][1][0]=max(dp[i-1][1][0],dp[i-1][0][0])+1;
            dp[i][1][1]=max(dp[i-1][1][1],dp[i-1][0][1])+1;
            for(int p=0;p<3;++p)
                for(int q=0;q<2;++q)
                    if(p!=1)dp[i][p][q]=dp[i-1][p][q];
        }else if(s[i]=='i'){
            dp[i][2][0]=max(dp[i-1][1][0],dp[i-1][0][0])+1;
            dp[i][2][0]=max(dp[i][2][0],dp[i-1][2][0]+1);
            dp[i][2][1]=max(dp[i-1][1][1],dp[i-1][0][1])+1;
            dp[i][2][1]=max(dp[i][2][1],dp[i-1][2][1]+1);
            for(int p=0;p<3;++p)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX