【BZOJ】3427: Poi2013 Bytecomputer
题意:
给定一个长度为\(n\)的\(\{-1, 0, 1\}\)组成的序列,你可以进行\(x_i=x_i+x_{i-1}\)这样的操作,求最少操作次数使其变成不降序列。(\(n \le 1000000\))
分析:
我们考虑第\(i\)个数,如果\(x_i < x_{i-1}\),要想\(x_i \ge x_{i-1}\),那么\(x_i\)至少要加一次\(x_{i-1}\)才能大过\(x_{i-1}\)(当然\(x_{i-1} < 0\)那么永远不可能了)。
题解
然后我们猜测,最终的最优序列也一定由\(\\\{-1, 0, 1\\\}\)三个数组成。我们来证明一下:
假设第一个不是\(\\\{-1, 0, 1\\\}\)数的位置为\(p\),且假设\(p < n\),则容易知道\(x_p > 1\)。当\(x_{p+1} = -1\)时,我们要加2次才能大于等于\(x_p\),当\(x_{p+1}=0或1\)时,我们要加1次。而由于\(x_p > 1\),那么说明\(x_p\)也一定能够等于\(1\),这是因为\(x_{p-1}\)必然等于\(1\)(否则\(x_p\)就不会大于\(1\))。而当\(x_p=1\)时,对于\(x_{p+1} \in \\\{-1, 0, 1\\\}\)我们分别只需要加2次、加1次和加0次就能满足\(x_{p+1} \ge x_p\)。显然比\(x_p > 1\)要优。得证。
于是我们设\(d[i, j]\)表示前\(i\)个元素当前元素为\(j\)时的最少操作次数,然后推一下就行了..
#include <bits/stdc++.h>
using namespace std;
const int oo=~0u>>1;
int n, d[2][3];
int main() {
scanf("%d", &n);
int x; scanf("%d", &x);
int *now=d[0], *last=d[1];
last[0]=last[1]=last[2]=oo;
if(x==-1) last[0]=0;
if(x==0) last[1]=0;
if(x==1) last[2]=0;
for(int i=2; i<=n; ++i) {
scanf("%d", &x);
now[0]=now[1]=now[2]=oo;
if(last[0]!=oo) {
now[0]=last[0]+x+1;
if(x>=0) now[1]=last[0]+x;
if(x==1) now[2]=last[0];
}
if(last[1]!=oo) {
if(x==0) now[1]=min(now[1], last[1]);
if(x==1) now[2]=min(now[2], last[1]);
}
if(last[2]!=oo) {
now[2]=min(now[2], last[2]+1-x);
}
swap(now, last);
}
swap(now, last);
int ans=min(min(now[0], now[1]), now[2]);
if(ans==oo) puts("BRAK");
else printf("%d\n", ans);
return 0;
}
【BZOJ】3427: Poi2013 Bytecomputer的更多相关文章
- 【BZOJ】3052: [wc2013]糖果公园
http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...
- 【BZOJ】3319: 黑白树
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...
- 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...
- 【BZOJ】1013: [JSOI2008]球形空间产生器sphere
[BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...
- 【BZOJ】1002:轮状病毒(基尔霍夫矩阵【附公式推导】或打表)
Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图 ...
- 【BZOJ】【3083】遥远的国度
树链剖分/dfs序 其实过了[BZOJ][4034][HAOI2015]T2以后就好搞了…… 链修改+子树查询+换根 其实静态树的换根直接树链剖分就可以搞了…… 因为其实只有一样变了:子树 如果roo ...
- 【BZOJ】【2434】【NOI2011】阿狸的打字机
AC自动机+DFS序+BIT 好题啊……orz PoPoQQQ 大爷 一道相似的题目:[BZOJ][3172][TJOI2013]单词 那道题也是在fail树上数有多少个点,只不过这题是在x的fail ...
- 【BZOJ】【2738】&【Tsinsen】【A1333】矩阵乘法
整体二分+树状数组 过了[BZOJ][2527][POI2011]Meteors以后这题就没那么难啦~ 关键是[从小到大]依次插入数字,然后整体二分每个查询的第k大是在第几次插入中被插入的……嗯大概就 ...
- 【BZOJ】【3170】【TJOI2103】松鼠聚会
切比雪夫距离+曼哈顿距离 题解:http://www.cnblogs.com/zyfzyf/p/4105456.html 其实应该先做这题再做[BZOJ][3210]花神的浇花集会的吧…… 我们发现d ...
随机推荐
- Java简单示例-用户登录、单个页面的增删改查及简单分页
index.html -登录->stulist.jsp (index.html传递到LoginServlet,进行登录检测及写入session,NO返回index.html界面,OK 跳转到s ...
- EF唯一索引
this.Property(p => p.Name) .IsRequired() .HasMaxLength()) .HasColumnAnnotation("Index", ...
- 给网页 title添加图片。
在网页的title中添加 <link rel="shortcut icon" href="logo.png" /> 即可. 可以看下百度搜索的代码, ...
- session生命周期(一)
Session存储在服务器端,一般为了防止在服务器的内存中(为了高速存取),Session在用户访问第一次访问服务器时创建,需要注意只有访问JSP.Servlet等程序时才会创建Session,只访问 ...
- PhpStorm 集成 开源中国(oschina.net)的Git项目,提交SVN时注意事项
第一步:配置 git.exe File -> Default Settings -> Version Control -> Git -> Path go Git executa ...
- Mac Pro 资源管理器 Double Commander“个性化设置” 备份
操作系统自带的资源管理器,总是有些别扭的地方,在 Windows 系统下,我一般用 Total Commander(破解版)来作为替代品.现在换为 Mac 系统,自带的 Finer 也不怎么好用,连最 ...
- css动画 animation
今天用css做了一个简单的三角上下移动的一个小动画,说白了就是在改变该物体的height值.除了这个方法,还可以用js. 一.在用css写动画时,一定要记住兼容性问题.如何解决该兼容性?在前面加内核前 ...
- redis cluster php 客户端 predis
php有redis的扩展,目前来说,还不支持redis cluster,推荐一下predis,功能比较全,从单个,到主从,到cluster都是支持的.效率怎么样,要靠自己去测试一下. 1,下载pred ...
- 精简的网站reset 和 css通用样式库
参考链接:http://www.zhangxinxu.com/wordpress/2010/07/我是如何对网站css进行架构的/ reset.css body{ line-height:1.4; c ...
- SpringMVC拦截器
springmvc的拦截器 需求:进行用户的访问控制,判断用户是否登陆,如果登陆进行正常访问,如果没有登陆跳转到登陆页面. 1自定义拦截器类 package org.guangsoft.utils; ...