ACM学习历程—CodeForces 590A Median Smoothing(分类讨论 && 数学)
题目链接:http://codeforces.com/problemset/problem/590/A
题目大意是给一个串,头和尾每次变换保持不变。
中间的a[i]变成a[i-1],a[i],a[i+1]的中位数,而且此题串是01串。
对于01串
0 0 0中位数是0
0 0 1中位数是0
0 1 1中位数是1
1 1 1中位数是1
所以
1、串中有两个相邻以上的0或者1是保持不变的。
2、会变的只有是两个1中间的0或者两个0中间的1。
但是到这里的话,虽然证明了肯定能变成稳定态,就算把相同数字分组模拟,给1010101010.....这种形式的话需要O(n)次才能稳定。自然不能模拟。。
由于条件2,发现如果两个满足1的串中间夹着0101这种间隔的串,那么这一段只有中间0101串会变化。
那么我只需要输入时分组,对于每两个满足1的串处理中间的0101串,然后取所有0101串变换的最大次数即为答案所要求。
然后考虑两个满足1的串:
两头是0或者两头是1是同一种情况:
1110101010111 ->变换4次得到1111111111111
一头是0一头是1:
111010101000->变换3次得到111111000000
然后就发现就是变换(中间串长度+1)/2次,得到的全1或0,或者一半1一半0。
然后写的时候要特殊考虑一下一开始全0或1,或者一半0一半1发情况。
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
#include <string>
#define LL long long using namespace std; const int maxN = ;
int n, top;
struct node
{
bool val;
int num;
}s[][maxN]; void input()
{
top = -;
int u;
for (int i = ; i < n; ++i)
{
scanf("%d", &u);
if (top == - || u != s[][top].val)
{
top++;
s[][top].val = u;
s[][top].num = ;
}
else s[][top].num++;
}
} void work()
{
int run = , ttop = -, from, cnt;
for (int i = ; i <= top; i++)
{
ttop++;
s[][ttop] = s[][i];
if (i < top- && s[][i+].num == )
{
from = i;
i++;
while (s[][i].num == && i < top) i++;
if (s[][from].val == s[][i].val)
{
cnt = i-from+;
ttop++;
s[][ttop].val = s[][i].val;
s[][ttop].num = cnt-;
run = max(run, cnt/);
}
else
{
cnt = i-from+;
ttop++;
s[][ttop].val = s[][from].val;
s[][ttop].num = cnt/-;
ttop++;
s[][ttop].val = s[][i].val;
s[][ttop].num = cnt/-;
run = max(run, cnt/-);
}
i--;
}
}
printf("%d\n", run);
bool flag = false;
for (int i = ; i <= top; ++i)
{
for (int j = ; j < s[][i].num; ++j)
{
if (flag) printf(" ");
printf("%d", s[][i].val);
flag = true;
}
}
printf("\n");
} int main()
{
//freopen("test.in", "r", stdin);
while (scanf("%d", &n) != EOF)
{
input();
work();
}
return ;
}
ACM学习历程—CodeForces 590A Median Smoothing(分类讨论 && 数学)的更多相关文章
- ACM学习历程—Codeforces Round #354 (Div. 2)
http://codeforces.com/contest/676 在allzysyz学弟和hqwhqwhq的邀请下,打了我的第三场CF... 毕竟在半夜..所以本来想水到12点就去睡觉的...结果一 ...
- ACM学习历程—CodeForces 601A The Two Routes(最短路)
题目链接:http://codeforces.com/problemset/problem/601/A 题目大意是有铁路和陆路两种路,而且两种方式走的交通工具不能在中途相遇. 此外,有铁路的地方肯定没 ...
- CodeForces 590A Median Smoothing
构造题. 答案可以o(n)构造出来.首先要发现规律.只有01交替的串才可能变化,变化规律如下: 1开头,长度为偶数(0结尾):变(len-2)/2次 变完后 前半1 后半01开头,长度为奇数(1结尾) ...
- ACM学习历程—Codeforces 446C DZY Loves Fibonacci Numbers(线段树 && 数论)
Description In mathematical terms, the sequence Fn of Fibonacci numbers is defined by the recurrence ...
- ACM学习历程—CodeForces 176B Word Cut(字符串匹配 && dp && 递推)
Description Let's consider one interesting word game. In this game you should transform one word int ...
- ACM学习历程—UESTC 1226 Huatuo's Medicine(数学)(2015CCPC L)
题目链接:http://acm.uestc.edu.cn/#/problem/show/1226 题目就是构造一个对称的串,除了中间的那个只有1个,其余的两边都是对称的两个,自然答案就是2*n-1. ...
- ACM学习历程—UVALive 7147 World Cup(分类讨论 && 贪心)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- 完成了C++作业,本博客现在开始全面记录acm学习历程,真正的acm之路,现在开始
以下以目前遇到题目开始记录,按发布时间排序 ACM之递推递归 ACM之数学题 拓扑排序 ACM之最短路径做题笔记与记录 STL学习笔记不(定期更新) 八皇后问题解题报告
- ACM学习历程—HDU 5512 Pagodas(数学)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5512 学习菊苣的博客,只粘链接,不粘题目描述了. 题目大意就是给了初始的集合{a, b},然后取集合里 ...
随机推荐
- 九度OJ 1184:二叉树遍历 (二叉树)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3515 解决:1400 题目描述: 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储). 例如如下的 ...
- Python菜鸟之路:Python基础
一.Python版本升级至3.0的必然性 In November 2014, it was announced that Python 2.7 would be supported until 202 ...
- python基础-第九篇-9.2线程与多线程
单线程 import time beginTime = time.time() for a in range(10): print(a) time.sleep(1) shijian = time.ti ...
- linux c编程:信号(二) alarm和pause函数
使用alarm函数可以设置一个定时器,在将来的某个时刻该定时器超时.当定时器超时后,产生SIGALRM信号.如果忽略或不捕捉此信号,则其默认动作是终止调用该alarm函数的进程 #include< ...
- persisted? vs new_record?
https://joe11051105.gitbooks.io/you-need-to-know-about-ruby-on-rails/content/activerecord/persisted_ ...
- 说说JavaScript 中的new吧
在其他语言中,new操作符都是用来实例化创建一个对象的,JavaScript 中同样如此,但是它又有一些不同.为了说清楚这个问题我们先来看一下JavaScript 中的类.原型.原型链.继承这些概念吧 ...
- Jmeter使用文档(windows)
1. 安装jdk并配置环境变量 以1.8为例: (1)安装jdk1.8; (2)在系统变量里点击新建,变量名填写JAVA_HOME,变量值填写JDK的安装路径“C:\Program Files\Jav ...
- NCL 小图对其问题
从昨天下午开始的折腾终于告一段落,虽然解决得不甚完善,只是图可以用了…… 问题起自想把之前手动拼成的一页四张的图用脚本自动生成,这样一方面应该对得更齐一点,另一方面大大节省人工. 这本来应该是件很容易 ...
- 0423 hashlib模块、logging模块、configparse模块、collections模块
一.hashlib模块补充 1,密文验证 import hashlib #引入模块 m =hashlib.md5() # 创建了一个md5算法的对象 m.update(b') print(m.hexd ...
- http keep-alive简解
http协议中,客户端发送请求,服务端在接收到请求后,返回所需要的数据后可以关闭连接,这样客户端读取完数据时会返回EOF(-1),表明数据已接受完全 备注:EOF end of file 什么是kee ...