[ABC380C] Move Segment 题解

[ABC380C] Move Segment 题解

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

题目大意

给你一个字符串 ss01 构成,将其分为块中只有一种数字的块。将给定的第 k 块数字为 1 的块与第 k1 块合并,并输出修改后的字符串。

思路分析

直接按照题意模拟即可。建立结构体数组表示每个块,变量 s 为本块的数字, len 为块的长度。将 s 遍历一遍,初始化结构体数组,又因为 s 只由 01 组成,可知第 k 块数字为 1 的块的编号应为 2×k ,那么将其与上一个数字为 1 的块,其实也就是将其与编号为 2×k1 的数字为 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;
}
posted @   adsd45666  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示