首页 > 移动平台 > 详细

移动序列

时间:2021-06-18 23:54:03      阅读:17      评论:0      收藏:0      [点我收藏+]

移动序列

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;
}

移动序列

原文:https://www.cnblogs.com/lijiaji/p/14901131.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!