题解:AT_abc380_c [ABC380C] Move Segment

Very_Smart_Honet

2024-11-18 15:15:50

Solution

题解 AT_abc380_c [ABC380C] Move Segment

题目大意

数组定义

思路

从头至尾遍历一遍 S,定义临时变量 number=0cnt=0last=0

第一部分—处理 连续 1 的部分

第二部分—移动 第 k 个部分

第三部分—输出序列 S

定义临时变量 now=1 (用于当前要使用第几个区间)。

代码部分

本人认为前面已经很详细了,就不再多说了。

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k;
string s;
int id[1000010];
int shu[1000010];
int cnt;
signed main()
{
    cin>>n>>k;
    cin>>s;
    int number=0,last=0;
    for(int i=0;i<n;i++)
    {
        if(s[i]=='1')
        {
            number++;
        }
        else if(s[i-1]=='1'&&s[i]=='0')
        {
            id[++cnt]=last;
            shu[cnt]=number;
            number=0;
        }
        if(s[i]=='0'&&s[i+1]=='1')
        {
            last=i+1;
        }
    }
    if(number!=0)
    {
        id[++cnt]=last;
        shu[cnt]=number;
        number=0;
    }
    id[k]=id[k-1]+shu[k-1];
    int now=1;
    for(int i=0;i<n;i++)
    {
        if(i>=id[now]&&i<=id[now]+shu[now]-1)
        {
            cout<<1;
        }
        else
        {
            cout<<0;
        }
        if(i+1==id[now+1])
        {
            now++;
        }
    }
    return 0;
}

如果大家觉得不错,留个赞再走吧!