首页 > 其他分享 >[ABC370C] Word Ladder 题解

[ABC370C] Word Ladder 题解

时间:2024-09-08 14:14:44浏览次数:3  
标签:相等 Word 题解 ABC370C 修改 s2 字符串 s1 字典

题目描述:

给予两个相等长度的序列,\(S\) 与 \(T\) ,以及一个空数组 \(X\) ,每在 \(S\) 上修改一个字符,便将修改后的 \(S\) 加入 \(X\) 中,直到 \(S\) 与 \(T\) 相同。(输出字典序最小的 \(X\) 数组)

拿过题一看,感觉还是蛮简单的,本题主要的难点在字符串的字典序上。

字符串字典序的定义:

  1. 若两个字符串的长度相等,从左向右依字符逐个比较,第一对不相等的字符的大小即为这两对字符串的大小。
  2. 若长度不相等,则较长的字符串较大。
  3. 若长度相等且每个字符都相等,则这两个字符串相等。

则此题的解法其实就是一种贪心:

\(S\) 中与 \(T\) 不同的字符分为两种,一种为大于 \(T\) 中同位置字符的,另一种相反。在修改第一种情况时,\(S\) 的字典序变小,修改第二种时, \(S\) 字典序变大。所以要先修改第一种。

所以先从左向右扫,若 s[i]!=t[i]&&s[i]>t[i] 就修改 \(S\) 字符串,可证得这样修改的字符串字典序最小。

之后再从右往左扫,若 s[i]!=t[i] 就修改 \(S\) 字符串,同理,可证得这样修改的字符串字典序最小。

#include <bits/stdc++.h>
#define seq(q, w, e) for (int q = w; q <= e; q++)
#define ll long long
using namespace std;
const int maxn = 1e5+10;

string s1,s2;
int ans;

signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>s1>>s2;
    int n=s1.length();
    seq(i,0,n-1){
        if(s1[i]!=s2[i]){
            ans++;                 //由于要修改的字母量为定值,所以优先统计
        }
    }
    cout<<ans<<"\n";
    seq(i,0,n-1){
        if(s1[i]-s2[i]>0){
            s1[i]=s2[i];
            cout<<s1<<"\n";       //无需存储,直接输出
        }
    }
    for(int i=n-1;i>=0;i--){
        if(s1[i]!=s2[i]){
            s1[i]=s2[i];
            cout<<s1<<"\n";
        }
    }
    return 0;
}

标签:相等,Word,题解,ABC370C,修改,s2,字符串,s1,字典
From: https://www.cnblogs.com/adsd45666/p/18402826

相关文章

  • P11019 「LAOI-6」[太阳]] 请使用最新版手机 QQ 体验新功能 题解
    非常简单的模拟题。由题意得,即找出输入字符串中,用[]围起来的片段中的大写字母\(A_1,A_2,A_3...A_n\)然后将其转换为小写输出\(/a_1a_2a_3...a_n\)即可。#include<bits/stdc++.h>#defineseq(q,w,e)for(intq=w;q<=e;q++)#definelllonglongusingnamespace......
  • P11020 「LAOI-6」Radiation 题解
    一道简单的构造题,其实不用想的十分复杂的说。首先,最多发射的宇宙射线\(sum\)也最多为\(sum_{max}=min(m,n)\)也就是说,无论如何摆放石子,也只能达到这个数量。那么我们的目的便变成了如何让石子变成这一个形状。如上图,在一个\(3\times6\)的矩阵中,其实只要三颗石子即可满足......
  • AtCoder Beginner Contest 370 A-F题解
    A#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;mt19937rnd(time(0));#defineintlonglongtypedeftuple<int,int,int>tp;#definexfirst#defineysecondtypedefpair<int,int>pii;typedefpair<double,double>......
  • 配置PHP的Session存储到Mysql / Redis / memcache 以及使用opcache以及apc缓存清除工
    一、配置PHP的Session存储到Mysql,Redis以及memcache等        PHP的会话默认是以文件的形式存在的,可以通过简单的配置到将Session存储到NoSQL中,即提高了访问速度,又能很好地实现会话共享!1.默认配置:session.save_handler=filessession.save_path=/tmp/2.配......
  • 【洛谷 P1996】约瑟夫问题 题解(队列+模拟+循环)
    约瑟夫问题题目描述个人围成一圈,从第一个人开始报数,数到的人出列,再由下一个人重新从开始报数,数到的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。注意:本题和《深入浅出-基础篇》上例题的表述稍有不同。书上表述是给出淘汰名小朋友,而该题是全部出圈。输入......
  • 【题解】CF1955E
    CF1955E翻译思路代码翻译原题链接CF1955E思路  由于每次操作区间长度是定值,所以我们可以说,如果最前面的数已经是1了,那它再也不会被进入操作。因为如果把它变回0,那想再变成1只能以它为起点再操作一次,前后两次操作抵消。  所以思路很简单,直接......
  • Leetcode 第 409 场周赛题解
    Leetcode第409场周赛题解Leetcode第409场周赛题解题目1:3242.设计相邻元素求和服务思路代码复杂度分析题目2:3243.新增道路查询后的最短距离I思路代码复杂度分析题目3:3244.新增道路查询后的最短距离II思路代码复杂度分析题目4:3245.交替组III思路代码复杂度......
  • 题解:AT_abc370_c [ABC370C] Word Ladder
    说句闲话并不会有更好的阅读体验。这题是一个比较奇葩的贪心、构造。也可以认为是一个数据结构略有难度的练习题。理论部分?>注:使用\(N\)表示字符串长度。一句段话题意:三个字符串\(S\)、\(T\)、\(X\),其中\(S\)和\(T\)仅包含小写字母且等长,\(X\)为空。每一个操作可以......
  • CF2002D2 DFS Checker (Hard Version) 题解
    https://codeforces.com/problemset/problem/2002/D2考虑找一个容易维护的必要条件,再证明充分性。最容易想到的是每个子树对应一个区间,子树根位于左端点sol1相邻的结点\(p_{i-1},p_i\)有两种情况:\(fa[p_i]=p_{i-1}\);叶子\(p_{i-1}\)在子树\(fa[p_i]\)中,回溯到\(fa[......
  • abc370 A-E题解 (AtCoder Beginner Contest 370)
     A这类简单题,看清楚:OutputPrint Yes, No,or Invalid accordingtotheinstructionsintheproblemstatement. B Cstd,这样写(0->n-1,n-1->0),可以少写一个vector1#include<bits/stdc++.h>2usingnamespacestd;34intmain(){5strings,......