zoukankan      html  css  js  c++  java
  • CodeForces 590A Median Smoothing

    构造题。

    答案可以o(n)构造出来。首先要发现规律。只有01交替的串才可能变化,变化规律如下:

    1开头,长度为偶数(0结尾):变(len-2)/2次 变完后 前半1 后半0
    1开头,长度为奇数(1结尾):变(len-1)/2次 变完后 全为1
    0开头,长度为偶数(1结尾):变(len-2)/2次 变完后 前半0 后半1
    0开头,长度为奇数(0结尾):变(len-1)/2次 变完后 全为0

    然后就是在原串中寻找01交替串,然后按照上述规律进行变换。

    #include <cstdio>
    #include <cstring>
    #include <vector>
    #include<cmath>
    #include<ctime>
    #include<cstdlib>
    using namespace std;
    
    const int maxn=550000;
    int n;
    int a[maxn],b[maxn];
    
    struct X
    {
        int st,en;
        int num;
    }s[maxn];
    int tot;
    
    int main()
    {
        while(~scanf("%d",&n))
        {
            for(int i=1; i<=n; i++) scanf("%d",&a[i]);
            a[0]=a[1]; a[n+1]=a[n]; a[n+2]=9545664;
            tot=0; int pos=0;
            for(int i=pos;i<=n+1;)
            {
                for(int j=i;j<=n+2;j++)
                {
                    if(a[j]==a[i]) continue;
                    else
                    {
                        if(j-1!=i)
                        {
                            s[tot].st=i;
                            s[tot].en=j-1;
                            s[tot].num=a[i];
                            tot++;
                        }
                        i=j;
                        break;
                    }
                }
            }
    
            int ans=0;
            for(int i=1;i<=n;i++) b[i]=a[i];
    
            for(int i=0;i<tot+1;i++)
            {
                int len=s[i+1].st-s[i].en+1;
                if(s[i].num==1)
                {
                    if(s[i+1].num==0)
                    {
                        ans=max(ans,(len-2)/2);
                        for(int k=s[i].en;k<=s[i].en+len/2-1;k++) b[k]=1;
                        for(int k=s[i].en+len/2;k<=s[i+1].st;k++) b[k]=0;
                    }
                    else
                    {
                        ans=max(ans,(len-1)/2);
                        for(int k=s[i].en;k<=s[i].en+len/2-1;k++) b[k]=1;
                        for(int k=s[i].en+len/2;k<=s[i+1].st;k++) b[k]=1;
                    }
                }
                else
                {
                    if(s[i+1].num==0)
                    {
                        ans=max(ans,(len-1)/2);
                        for(int k=s[i].en;k<=s[i].en+len/2-1;k++) b[k]=0;
                        for(int k=s[i].en+len/2;k<=s[i+1].st;k++) b[k]=0;
                    }
                    else
                    {
                        ans=max(ans,(len-2)/2);
                        for(int k=s[i].en;k<=s[i].en+len/2-1;k++) b[k]=0;
                        for(int k=s[i].en+len/2;k<=s[i+1].st;k++) b[k]=1;
                    }
                }
            }
    
            printf("%d
    ",ans);
            for(int i=1; i<=n; i++) printf("%d ",b[i]);
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    推荐一款优秀的web自动化测工具
    基于kylinTOP工具的HTTP2压力测试
    SIP压力测试——奇林软件kylinPET
    软件WEB自动化测试工具之智能元素定位
    软件自动化测试工具之智能元素定位
    软件自动化测试工具之元素智能定位
    压力测试工具有哪些
    optimizing Wi-Fi solution for International School
    All in One我有一个梦想,所有的应用程序都可以跑在tablet上面
    C#.Net全栈工程师之路-学习路径
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5472978.html
Copyright © 2011-2022 走看看