http://codeforces.com/problemset/problem/590/A

在CF时没做出来,当时直接模拟,然后就超时喽。

题意是给你一个0 1串然后首位和末位固定不变,从第二项开始到倒数第二项,当前的a[i]=(a[i-1],a[i],a[i+1])三项排序后的中间项,比如连续3项为

1 0 1,那么中间的就变为1,然后题目让你输出达到稳定状态时所需的最小步数,不能的话输出-1。

无论给你啥数列,都能达到稳态。所以不可能输出-1;

还有一开始就稳定不变,或经过几次变换而稳定的,就不会在变化了(感觉这句话是废话);

本题的关键就是要找在变的段 比如11010101011,在变的段为中间的0101010段,而这最小的步数为(7+1)/2=4步,可以发现每次变换都会使两边的边相同的加1;所以每次变化

两边都加一所以是要变化的个数加1除二。上面一次变换为11101010111,然后到最后都变为1(如果两侧为0则都变为0),因为每次变化的结果是每端都加一个与两端相同的。再举个要变化的为

偶数的例子看看有什么不同1101010.如果偶数的化要变的前一项和开始不改变那项是不一样的,所以变换步数为(4)/2;再根据上面的结论正好一半变的和要变的前一项一样

一半和开始不变的一样,所以最后结果为1111000;

上面所举的例子只是一段变化。我们要找的是所有要变化的段,然后找要变换的段的最长那段,也就是变化次数最多的,就为所求。

最后稳态可根据上面所给的方法求的,就是找到所有的段都用上面的变换。

下面给代码:

 1 #include<stdio.h>
2 #include<algorithm>
3 #include<stdlib.h>
4 #include<iostream>
5 #include<string.h>
6 #include<math.h>
7 typedef long long ll;
8 using namespace std;
9 int a[500010];
10 int b[500010];//最后稳态的数组
11 int main(void)
12 {
13 int flag[500010]= {0};//标记需要变化的数组
14 int x,y,z,i,j,k,p,q;
15 scanf("%d",&k);
16 for(i=0; i<k; i++)
17 {
18 scanf("%d",&a[i]);
19 }
20 b[0]=a[0];//首相不变
21 b[k-1]=a[k-1];//末项不变
22 for(i=1; i<k-1; i++)
23 {
24 if(a[i]==a[i-1]||a[i]==a[i+1])
25 {
26 continue;
27 }
28 else
29 {
30 flag[i]=1;
31 }
32 }//标记需要变化的
33 flag[0]=0;//首相不变标记
34 flag[k-1]=0;//末项不变标记
35 int ans=0;
36 for(i=1; i<k-1;)
37 {
38 if(flag[i])
39 {
40 int uu=i;
41 int xx=i;
42 while(flag[xx])
43 {
44 xx++;
45 }//找变化段的长度
46 if((xx-uu)%2==0)//变化段为偶数的情况
47 {
48 ans=(xx-uu+1)/2>ans?(xx-uu+1)/2:ans;//ans中存最大的变化次数
49 for(j=uu; j<uu+(xx-uu)/2; j++)
50 {
51 b[j]=a[uu-1];
52 }
53 for(j=(xx-uu)/2+uu; j<xx; j++)
54 {
55 b[j]=a[xx];
56
57 }
58 }
59 else//变化段为奇数的情况
60 {
61 ans=(xx-uu+1)/2>ans?(xx-uu+1)/2:ans;
62 for(j=uu; j<xx; j++)
63 {
64 b[j]=a[xx];
65 }
66 }
67
68 i=xx;
69
70 }
71 else if(flag[i]==0)
72 {
73 b[i]=a[i];//不变的直接按原位赋给b
74 i++;
75 }
76
77
78 }
79 printf("%d\n",ans);
80 for(i=0; i<k-1; i++)
81 {
82 printf("%d ",b[i]);
83 }
84 printf("%d\n",b[k-1]);
85
86 return 0;
87
88 }

Codeforces Round #327 (Div. 1), problem: (A) Median Smoothing的更多相关文章

  1. Codeforces Round #716 (Div. 2), problem: (B) AND 0, Sum Big位运算思维

    & -- 位运算之一,有0则0 原题链接 Problem - 1514B - Codeforces 题目 Example input 2 2 2 100000 20 output 4 2267 ...

  2. Codeforces Round #327 (Div. 2) C. Median Smoothing 找规律

    C. Median Smoothing Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/591/p ...

  3. Codeforces Round #327 (Div. 2) B. Rebranding C. Median Smoothing

    B. Rebranding The name of one small but proud corporation consists of n lowercase English letters. T ...

  4. Codeforces Round #327 (Div. 2)C. Median Smoothing 构造

    C. Median Smoothing   A schoolboy named Vasya loves reading books on programming and mathematics. He ...

  5. Codeforces Round #327 (Div. 2)

    题目传送门 水 A - Wizards' Duel 题目都没看清就写了,1e-4精度WA了一次... /************************************************ ...

  6. codeforces590a//Median Smoothing//Codeforces Round #327 (Div. 1)

    题意:一个数组,一次操作为:除首尾不变,其它的=它与前后数字的中位数,这样对数组重复几次后数组会稳定不变.问要操作几次,及最后的稳定数组. 挺难的题,参考了别人的代码和思路.总的来说就是找01010, ...

  7. Codeforces Round #327 (Div. 2) C Median Smoothing(找规律)

    分析: 三个01组合只有八种情况: 000 s001 s010 0011 s100 s101 1110 s111 s 可以看出只有010,101是不稳定的.其他都是稳定的,且连续地出现了1或0,标记为 ...

  8. Codeforces Round #327 (Div. 2) A. Wizards' Duel 水题

    A. Wizards' Duel Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/591/prob ...

  9. Codeforces Round #753 (Div. 3), problem: (D) Blue-Red Permutation

    还是看大佬的题解吧 CFRound#753(Div.3)A-E(后面的今天明天之内补) - 知乎 (zhihu.com) 传送门  Problem - D - Codeforces 题意 n个数字,n ...

随机推荐

  1. du命令之计算文件大小

    在linux中,常用du命令来计算文件或目录的大小 名称: du - 计算每个文件的磁盘用量,目录则取总用量. 用法: du [选项]... [文件]... 常用选项 -a, --all 输出所有文件 ...

  2. (转载)SQL Server 2008 连接JDBC详细图文教程

    点评:SQL Server 2008是目前windows上使用最多的sql数据库,2008的安装机制是基于framework重写的,特点是非常耗时间SQL Server 2008是目前windows上 ...

  3. day01互联网架构理论

  4. Scala(三)【函数式编程】

    目录 一.方法和函数 1.方法 1)基本语法 2)简化原则 3)方法参数 2.函数 3.方法和函数的区别 二.高阶函数 三.匿名函数 四.柯里化 五.闭包 一.方法和函数 1.方法 1)基本语法 de ...

  5. 【leetcode】565. Array Nesting

    You are given an integer array nums of length n where nums is a permutation of the numbers in the ra ...

  6. linux之sar命令详解

    sar(System Activity Reporter系统活动情况报告)是目前Linux上最为全面的系统性能分析工具之一,可以从多个方面对系统的活动进行报告,包括:文件的读写情况.系统调用的使用情况 ...

  7. Android Bitmap 全面解析(一)加载大尺寸图片

    压缩原因:1.imageview大小如果是200*300那么加载个2000*3000的图片到内存中显然是浪费可耻滴行为;2.最重要的是图片过大时直接加载原图会造成OOM异常(out of memory ...

  8. Camera、音频录制与Vitamio框架

    一.Camera 1.概述 Android框架包含了各种相机哥相机功能的支持,是你可以在应用中捕获图像和视频. 在应用能使用设备上的相机之前,先想一想将来会如何使用此硬件: (1)Camera  应该 ...

  9. Gitlab安装操作说明书

    一.Gitlab安装操作步骤 登录官方网站https://about.gitlab.com/downloads/根据你所需要的系统版本,作者使用的是centos6, 检查您的服务器是否符合硬件要求.g ...

  10. 【编程思想】【设计模式】【结构模式Structural】享元模式flyweight

    Python版 https://github.com/faif/python-patterns/blob/master/structural/flyweight.py #!/usr/bin/env p ...