首页 > 其他分享 >题解:CF1381A1 Prefix Flip (Easy Version)

题解:CF1381A1 Prefix Flip (Easy Version)

时间:2024-07-19 09:29:18浏览次数:13  
标签:转化 int 题解 位置 Flip CF1381A1 字符串 操作 翻转

思路

这道题直接用下一题的代码就行了

\(C1\):

注意到限制 \(3n\) 很大,于是看每一位是不是一样的,再操作,如样例一:

转化第一位:\(01 \to 11\)。

转化第二位:\(11 \to 00 \to 10\)。

每次把当前位子提到第一位,然后翻转第一位,最后翻转回去,最多 \(3n\) 次,不用暴力操作直接计答案时间复杂度 \(O(n)\)。

\(C2\):

注意到限制 \(2n\) 缩小了,考虑将每一位转化为相同的 \(0/1\),如样例二:

转化第一个字符串:\(01011 \to 11011 \to 00011 \to 11111\)。

转化第二个字符串:\(11100 \to 00000\)。

这个可以从前面开始遍历,如果这个位置与后一个位置不同,那么就对这一个位置之前的进行操作,这样可以保证在处理这个位置时前面的位置上的数全部相同在转化第二个字符串时因为一、二、四位都在转化时满足要求,所以跳过了这几个步骤。

把两个字符串都进行上面的操作,会的到两个全是 \(0/1\) 的字符串,如果不相同的话再整体翻转一次就行了,最多 \(n-1+n-1+1\) 次,即 \(2n - 1\) 次操作满足要求。

Code

就只放 \(C2\) 的代码了

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 +  5;

int n;

char a[N],b[N];

vector <int> ans;

int main() {
    int T;
    cin>>T;
    while(T--) {
        ans.clear();
        scanf("%d%s%s",&n,a+1,b+1); 
        int l = 1,r = n,rev = 0;
        for(int i = n; i >= 1; --i) {
            if((a[r]^rev)==b[i]) {
	            if(l<r) --r;
    	        else ++r;
                continue;
            }
            if((a[l]^rev) == b[i]) ans.push_back(1);
            ans.push_back(i);
            swap(l,r);
            if(l<r) --r;
            else ++r;
            rev^=1;
        }
        cout<<ans.size();
        for(auto res : ans) cout<<' '<<res;
        cout<<'\n';
    }
    return 0;
}

标签:转化,int,题解,位置,Flip,CF1381A1,字符串,操作,翻转
From: https://www.cnblogs.com/DuckYa/p/18310808

相关文章

  • 牛客多校H题题解
    链接:[https://ac.nowcoder.com/acm/contest/81597/H]来源:牛客网题目描述Redstandsatthecoordinate\((0,0)\)oftheCartesiancoordinatesystem.Shehasastringofinstructions:up,down,left,right(where'right'increasesthex-coordinateby\(1......
  • 题解
    A-地毯标准的二维差分前缀和,定义\(s_{i,j}\)为当前格子的权值,然后根据题目模拟题意进行差分求和即可#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=1e3+10,mod=1e9+7;ints[N][N];signedmain(){std::ios::sync_with_......
  • 题解:2024牛客多校赛第二场 A Floor Tiles(思维)
    2024NowcoderMulti-UniversityTrainingContest2ProblemA.FloorTiles题目大意给你两种正方形图案,分别为以下两种:再给你三个整数\(N,M,K\),表示你需要用这两种图案,拼成一个\(N\)列\(M\)行的矩形。由于这两种图案十分特殊,他们能无缝衔接在一起。因此你需要让这个矩......
  • GESP编程能力等级认证C++编程真题解析 | 2024年3月五级
    学习C++从娃娃抓起!记录下CCF-GESP备考学习过程中的题目,记录每一个瞬间。附上汇总贴:GESP编程能力等级认证C++编程真题解析|汇总单选题第1题唯一分解定理描述的内容是()?A.任意整数都可以分解为素数的乘积B.每个合数都可以唯一分解为一系列素数的乘积C.两个不同的......
  • 题解:CF1912D Divisibility Test
    又是一道水绿。刚刚小学毕业的数学idiot——我释怀地笑了。第一种很好判断,当$b^k$为$n$的倍数时,取基数为$b$的能被$n$整除的整数$c$的最后$k$位数显然能被$n$整除。第二种也不难,当$b^k\equiv1\pmodn$时,取以$b$为底数的能被$n$整除的整数$c$的$k$......
  • 打造丰富AI生态体验 三星Galaxy Z Fold6|Z Flip6及生态新品中国发布
    7月17日,三星电子举行Galaxy新品中国发布会,正式面向中国市场推出第六代折叠屏手机三星GalaxyZFold6与GalaxyZFlip6。同步登陆国内的还有诸多智能穿戴新品,包括三星GalaxyRing、GalaxyWatch7、GalaxyWatchUltra以及三星GalaxyBuds3系列。作为三星在折叠屏领域的前沿科技成果......
  • Load balancer does not contain an instance for the service service-B [503] duri
    场景:service-A服务通过openFeign远程调用service-B服务的test()方法,结果报错Loadbalancerdoesnotcontainaninstancefortheserviceservice-Bfeign.FeignException$ServiceUnavailable:[503]during[POST]to[http://service-B/test]原因:报错信息的意思......
  • [题解]P1896互不侵犯
    数位DP模板题link题面[SCOI2005]互不侵犯题目描述在\(N\timesN\)的棋盘里面放\(K\)个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共\(8\)个格子。输入格式只有一行,包含两个数\(N,K\)。输出格......
  • T3 飞刀传承 题解
    题目描述李家自古以来就是飞刀名门,每一任家主都唤作小李。这一代的小李更是青出于蓝,将祖传的飞刀绝技使得出神入化,年纪轻轻便继承了李家祖传的招式,担下了家主之位。不料有日凶兽来袭,李家满门几尽被灭,只剩少数流落在外的弟子得以幸存。他一度想要自尽,却因李家飞刀绝技不能在他手上......
  • T2 替换字母2 题解
    题目描述:有长度为\(n\)的字符串,仅包含小写字母。小信想把字符串变成只包含一种字母。他每次可以选择一种字符\(c\),然后把长度最多为\(m\)的子串中的字符都替换成\(c\)。小信想知道最少需要操作几次能让字符串只包含一种字母。题意简述给定一个长度为\(n\)的小写字母串,每次可以......