侧边栏壁纸
博主头像
Hope博主等级

努力赚钱的工科研究生

  • 累计撰写 362 篇文章
  • 累计创建 129 个标签
  • 累计收到 5 条评论
标签搜索

Acwing春季每日一题 3358. 放养但没有完全放养

Hope
2022-03-19 / 0 评论 / 0 点赞 / 292 阅读 / 558 字
温馨提示:
本文最后更新于 2022-03-19,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Acwing春季每日一题 3358. 放养但没有完全放养

思路:

贪心。b字符串中如果出现了逆序或者相等的,那么一定不在一个abc..xyz中,例如 mood 两个o肯定不在同一个abc...xyz中,我们记b中满足性质的个数为cnt,最后的答案就是cnt + 1。

证明贪心的两个性质:

  1. A >= B, 且 B可以取到A,那么B就是答案
  2. 夹逼定理

这道题中,我们可以把abc..xyzabc...xyz...分成恰好可以完整覆盖牛文的段,那么我么可以把每一个逆序插到一个abc..xyz中,所以 B 可以取到 A,所以B就是答案。

代码:



#include<iostream>
#include<string>
#include<vector>

using namespace std;

int main(){
    string a,b;
    cin>>a>>b;
    vector<int> p(26 + 1);
    for(int i = 0;i < 26;i++) p[a[i] - 'a'] = i;
    int res = 1;
    for(int i = 0;i < b.size();i++){
        if(i && p[b[i] - 'a'] <= p[b[i - 1] - 'a']) res++;
    }
    cout<<res;
    return 0;
}
0

评论区