移动序列
Posted Treasure_lee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了移动序列相关的知识,希望对你有一定的参考价值。
移动序列
AcWing 3686
https://www.acwing.com/problem/content/3689/
贪心
思路
如图:四段连续的1,中间隔3个0.
从最左段开始,如果向左移,则中间隔4个0.如果向右移,两段连续1合并成一段,中间隔2个0.
如果从中间段开始,左移或右移,中间隔着的0个数不变。
所以我们只要找从第一个1到最后一个1中间隔多少个0.
代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 55;
int T,n;
int a[N];
int main()
{
cin >> T;
while (T--)
{
cin >> n;
for (int i = 1; i <= n; i ++ ) cin >> a[i];
int l = 0 ,r = 0;
for (int i = 1; i <= n; i ++ )
if (a[i] == 1)
{
l = i; break;
}
for (int i = n; i >= 1; i -- )
if (a[i] == 1)
{
r = i;break;
}
//cout << l << r << endl;
int res = 0;
for (int i = l; i <= r; i ++ )
{
if (a[i] == 0) res ++;
}
cout << res << endl;
}
return 0;
}
以上是关于移动序列的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ViewPager 中从 Activity 移动到 Fragment?未找到片段 ID 的视图
解决移动端报错:Unable to preventDefault inside passive event listener due to target being treated as……(代码片段