Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round) C. Remove Adjacent(贪心)

Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round) C. Remove Adjacent(贪心)_第1张图片Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round) C. Remove Adjacent(贪心)_第2张图片
思路:
给定长度为n的字符串,规定操作——
某一字符的前一位或者后一位的字符在字典序中比它小一,那么就可以删除这个字符,问最多可以删除多少个字符
贪心思路,每次按字典序递减的顺序从字符串内查找进行删除处理,进行递归就可以得到最大操作数


ll n,t,s;
char x[1000010];
int main() {
    scanf("%lld\n",&n);
    cin>>x;
    s=0;
    for(int i=25; i>0; i--) {
        char y=i+'a',z=i-1+'a';
        for(int j=0; j<n; j++) {
            if(x[j]==y) {
                int l=j-1,r=j+1;
                while(x[l]=='?'||x[l]==y) {
                    l--;
                }
                if(l>=0) {
                    if(x[l]==z) {
                        s++;
                        x[j]='?';
                        continue;
                    }
                }
                while(x[r]=='?'||x[r]==y) {
                    r++;
                }
                if(r<n) {
                    if(x[r]==z) {
                        s++;
                        x[j]='?';
                    }
                }
            }
        }
    }
    cout<<s<<endl;
}



你可能感兴趣的:(CodeForces)