上海计算机学会2024年4月月赛C++乙组T1交换的轮数

交换的轮数

内存限制: 256 Mb时间限制: 1000 ms

题目描述

给定一个只由 0 与 1 构成序列,不断扫描序列,在每一轮扫描的过程中,如果发现有一些 1 与 0 相邻,且 1 在前,0 在后,就在这一轮扫描后,同时将这些 1 与相邻的 0 交换。不断进行调整直到将所有的 0 都在序列的前一半,所有的 1 都在序列的后一半为止。

请计算需要进行多少轮交换才能完成调整。

输入格式
  • 若干 01 字符组成的一个序列
输出格式
  • 单个整数:表示交换的次数。
数据范围

设 n 表示序列的长度,

  • 30% 的数据,1≤n≤20
  • 60% 的数据,1≤n≤5000
  • 100% 的数据,1≤n≤300,000
样例数据

输入:
1100
输出:

解析:

对于每一个1,如果它后边有0,有几个0,就需要交换几轮;

如果它后边的1没有交换完,它只能等,如果跟后边的1紧挨着,等待的轮数为后边那个1等待的轮数+1,如果不挨着,等待的轮数为后边那个1等待的轮数减去它们俩中间0的个数,因为每个0都可以移动一轮。

最后一个1的交换轮数即为答案。

详见代码:

#include <iostream>
using namespace std;
string s;
int n;
int ans=0;
int main(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长春高老师信奥工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值