Codeforces Round #327 (Div. 1), problem: (A) Median Smoothing
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的更多相关文章
- 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 ...
- 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 ...
- 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 ...
- Codeforces Round #327 (Div. 2)C. Median Smoothing 构造
C. Median Smoothing A schoolboy named Vasya loves reading books on programming and mathematics. He ...
- Codeforces Round #327 (Div. 2)
题目传送门 水 A - Wizards' Duel 题目都没看清就写了,1e-4精度WA了一次... /************************************************ ...
- codeforces590a//Median Smoothing//Codeforces Round #327 (Div. 1)
题意:一个数组,一次操作为:除首尾不变,其它的=它与前后数字的中位数,这样对数组重复几次后数组会稳定不变.问要操作几次,及最后的稳定数组. 挺难的题,参考了别人的代码和思路.总的来说就是找01010, ...
- Codeforces Round #327 (Div. 2) C Median Smoothing(找规律)
分析: 三个01组合只有八种情况: 000 s001 s010 0011 s100 s101 1110 s111 s 可以看出只有010,101是不稳定的.其他都是稳定的,且连续地出现了1或0,标记为 ...
- 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 ...
- Codeforces Round #753 (Div. 3), problem: (D) Blue-Red Permutation
还是看大佬的题解吧 CFRound#753(Div.3)A-E(后面的今天明天之内补) - 知乎 (zhihu.com) 传送门 Problem - D - Codeforces 题意 n个数字,n ...
随机推荐
- day06 HTTP协议
day06 HTTP协议 HTTP协议 什么是http? HTTP 全称:Hyper Text Transfer Protocol 中文名:超文本传输协议 是一种按照URL指示,将超文本文档从一台主机 ...
- Lock锁的使用
在Java多线程中,可以使用synchronized关键字实现线程之间的同步互斥,在jdk1.5后新增的ReentrantLock类同样可达到此效果,且在使用上比synchronized更加灵活. 观 ...
- Vue API 3模板语法 ,指令
条件# v-if# v-if 指令用于条件性地渲染一块内容.这块内容只会在指令的表达式返回 truthy 值的时候被渲染. v-show# v-show 指令也是用于根据条件展示一块内容.v-show ...
- tomcat结合nginx
相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那究竟它有什么作用呢?可能很多人未必了解. 说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就不清楚了 ...
- Linux基础命令---ftp
ftp ftp指令可以用来登录远程ftp服务器. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法 ftp [ ...
- RAC常见的宏
1. RAC 作用:用来给某个对象的某个属性绑定信号,只要产生信号内容就会把内容给属性赋值 RAC(_label, text) = _textField.ra ...
- Apache log4j2-RCE 漏洞复现(CVE-2021-44228)
Apache log4j2-RCE 漏洞复现 0x01 漏洞简介 Apache Log4j2是一个基于Java的日志记录工具.由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶 ...
- EmmyLua 注解功能
前言 网上配置 EmmyLua 的方法很多,此处就不做赘述(因此前提是你已经安装配置完EmmyLua) 本文仅是对 EmmyLua插件 内 注解功能 用法的代码演示.因为网上大部分EmmyLua配置教 ...
- Python测试框架pytest入门基础
Pytest简介 Pytest is a mature full-featured Python testing tool that helps you write better programs.T ...
- 解决Vulnhub靶机分配不到IP问题
没法找到他的 ip,可能是网卡配置问题 (之前打开 .ova 文件默认联网方式是桥接,改成NAT) 在开机选择的时候,摁 e 编辑一下 把 ro 改成 rw single init=/bin/bash ...