首页 > 其他分享 >[ABC380C] Move Segment 题解

[ABC380C] Move Segment 题解

时间:2024-11-18 14:31:32浏览次数:1  
标签:数字 int 题解 Move Segment ABC380C

[ABC380C] Move Segment 题解

本题主要考察思维能力,其实不难。

题目大意

给你一个字符串 \(s\) ,\(s\) 由 \(0\) 和 \(1\) 构成,将其分为块中只有一种数字的块。将给定的第 \(k\) 块数字为 \(1\) 的块与第 \(k-1\) 块合并,并输出修改后的字符串。

思路分析

直接按照题意模拟即可。建立结构体数组表示每个块,变量 \(s\) 为本块的数字, \(len\) 为块的长度。将 \(s\) 遍历一遍,初始化结构体数组,又因为 \(s\) 只由 \(0\) 和 \(1\) 组成,可知第 \(k\) 块数字为 \(1\) 的块的编号应为 \(2 \times k\) ,那么将其与上一个数字为 \(1\) 的块,其实也就是将其与编号为 \(2 \times k-1\) 的数字为 \(0\) 的块交换位置,然后输出即可。

code

#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 = 1e6+10,inf=0x7fffffff;
struct node{
    int len;
    int s;
}a[maxn];
string s1;
int n,k,tot;
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin>>n>>k;
    cin>>s1;
    tot=1;
    for(int i=0;i<n;i++){
        if(s1[i]-'0'==a[tot].s)
            a[tot].len++;
        else{
            tot++;
            a[tot].s=s1[i]-'0';
            a[tot].len=1;
        }
    }
    swap(a[2*k],a[2*k-1]);
    seq(i,1,tot)
        seq(j,1,a[i].len)
            cout<<a[i].s;
    return 0;
}

标签:数字,int,题解,Move,Segment,ABC380C
From: https://www.cnblogs.com/adsd45666/p/18552565

相关文章

  • CF 705 题解
    CF705题解AHulk模拟即可.BSpiderMan打sg表可以发现,奇数个球先手必败(sg=0),偶数先手必胜(sg=1).多个组合只要把sg值异或起来就好.CThor暴力模拟就可以了,用队列模拟.DAntMan结论:按照编号由小到大加入链表,每次尽量让答案最小贪心就是对的.若原来是......
  • CF1023题解
    CF1023A一眼秒之题因为整个s串至多有1个*号,所以可以把s串分为两个部分分别与t串的前后进行匹配,看看前后能不能适配即可注意特判没有*的情况CF1023B一眼秒之题+1简单的,就是一个数k拆成两个数之和,这两个数的值域为(1,n),分讨k为奇偶,然后简单转化即可CF1023C小清新一眼秒之题+1......
  • 题解:CF contest 2037 : [Codeforces Round 988 (Div. 3)] (A-E)
    ATwice题面Kinich醒来迎接新的一天的开始。他打开手机,查看邮箱,发现了一份神秘的礼物。他决定打开礼物的盒子。Kinich用\(n\)整数打开数组\(a\)。最初,Kinich的分数是\(0\)。他将执行任意次数的以下操作:—选择两个索引\(i\)和\(j\)\((1\leqi\lt;j\leqn)\),确......
  • CF1731题解
    推荐食用方法:直接看本人的题面翻译即可,如有写题需要,可以交CF这套题T3、T5质量较高,值得认真思考,T2很神仙,T1、T4相对不太出彩,你问为什么没有T6?因为蒟蒻不会套题洛谷链接套题CF链接T1题面翻译给定一个正整数序列,每次可以将两个数替换为与之乘积相等的两个数,求任意次操作后最大......
  • JMeter响应乱码问题解决方案教程
    前言      ApacheJMeter是性能测试领域的强大工具,但在使用过程中,测试人员常会遇到响应乱码的问题。乱码不仅影响测试结果的可读性,还可能掩盖关键信息,对测试准确性构成威胁。本教程将深入探讨JMeter响应乱码问题的根源,并提供实用的解决方案。你将学习如何识别乱码现象......
  • [ARC187B] Sum of CC 题解
    若\(i\)与\(j\)有边,也就是\(a_i<a_j\),那么对于一个\(i<k<j\),会发现\(a_k>a_i\)和\(a_k<a_j\)至少满足一个。也就是说\(k\)也一定和\(i,j\)联通。于是我们发现了一个关键性质:所有联通块都为一个区间。那我们考虑\(i\)和\(i+1\)什么时候不联通:\(i\)之前的任......
  • AtCoder Beginner Contest 380 (A~E)题解
    A-123233遍历字符串统计出现次数即可。#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=1e6+10;intn,m,k;inta[N];signedmain(){ strings; cin>>s; map<char,int>mp; for(autot:s){ mp[t]++; } if(......
  • P10124 [USACO18OPEN] Family Tree B 题解
    思路这道题目很像找\(2\)头牛的最近公共祖先,即lca,但是并不用那么麻烦.因为数据很小,我们可以写一个山寨版的lca.具体如下.intmother(stringx,stringy){ intres=0; while(y!=""){//有名字的牛 if(x==y)returnres;//两头牛的名字相等,说明是同......
  • [AGC032B] Balanced Neighbors 题解
    考虑先写个暴力\(O(n2^m)\)的输出一下结果,看一下n=4,5,6的(尤其是n=6的)结果,尤其是每个点像其余哪几个点连边,然后就想到了构造方案。代码constintN=109;intn;inte[N][N];voidskymaths(){read(n);if(n%2==0){rep(i,1,n){......
  • 一些Leetcode关于双指针的简单题解
    26.删除有序数组中的重复项给你一个非严格递增排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。然后返回nums中唯一元素的个数。考虑nums的唯一元素的数量为k,你需要做以下事情确保......