最大值情况 CodeForces - 1321C

题目大意:
刚刚折腾完增加字符的操作,现在就来搞删除吧,给你一个由小写字母组成的字符串s,现在要做删除操作,不过不能随便删,要求是某个字母的两边,存在一个字母序小1的字母的时候,它就可以删除,例如说,“cabcb”,第二个c旁边有b就可以删除它,剩下"cabb",然后中间的b旁边有a,删除它,剩下"cab",再删一个b,最后得到"ca",一共删除了3个字符
一开始wa的思想,想着从头到尾遇见前一个比第二个大一的就删除第一个或者遇见逐渐增大的查询到最大的那一个数就删除,每当删除就从头开始,但是这个题让输出最多可删除的个数,最开始的想法看着挺靠谱,但是貌似跟最多并没有什么联系,提交之后果然wa了,这个题是让你删除一个大的字母,只要是大的就可能被删除,于是从z开始到b从大到小一个一个搜索是否能被删除,有点贴近暴力的感觉。此题解

#include <bits/stdc++.h>
typedef long long ll;
const int MAX=0x7fffffff;
using namespace std;
int n;
vector<int> s;
int main()
{
    cin>>n;
    char a;
    for(int i=0;i<n;i++){
        cin>>a;
        s.push_back(a-'a'+1);
    }
    int blen=s.size();
    vector<int>::iterator it=s.begin();
    for(int d=26;d>1;d--){
        for(int i=0;i<s.size();i++){
            if(s[i]==d){
                if(i>=1&&s[i-1]==d-1){
                    s.erase(it+i);
                    i=0;
                }
                else if(i<s.size()-1&&s[i+1]==d-1){
                    s.erase(it+i);
                    i=0;
                }
            }
        }
    }
    cout<<blen-s.size()<<endl;
    return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值