交换的轮数
内存限制: 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
输出:
3
解析:
对于每一个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(

最低0.47元/天 解锁文章
447

被折叠的 条评论
为什么被折叠?



