题意:

给定一个长度为\(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的更多相关文章

  1. 【BZOJ】3052: [wc2013]糖果公园

    http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...

  2. 【BZOJ】3319: 黑白树

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...

  3. 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...

  4. 【BZOJ】1013: [JSOI2008]球形空间产生器sphere

    [BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...

  5. 【BZOJ】1002:轮状病毒(基尔霍夫矩阵【附公式推导】或打表)

    Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图 ...

  6. 【BZOJ】【3083】遥远的国度

    树链剖分/dfs序 其实过了[BZOJ][4034][HAOI2015]T2以后就好搞了…… 链修改+子树查询+换根 其实静态树的换根直接树链剖分就可以搞了…… 因为其实只有一样变了:子树 如果roo ...

  7. 【BZOJ】【2434】【NOI2011】阿狸的打字机

    AC自动机+DFS序+BIT 好题啊……orz PoPoQQQ 大爷 一道相似的题目:[BZOJ][3172][TJOI2013]单词 那道题也是在fail树上数有多少个点,只不过这题是在x的fail ...

  8. 【BZOJ】【2738】&【Tsinsen】【A1333】矩阵乘法

    整体二分+树状数组 过了[BZOJ][2527][POI2011]Meteors以后这题就没那么难啦~ 关键是[从小到大]依次插入数字,然后整体二分每个查询的第k大是在第几次插入中被插入的……嗯大概就 ...

  9. 【BZOJ】【3170】【TJOI2103】松鼠聚会

    切比雪夫距离+曼哈顿距离 题解:http://www.cnblogs.com/zyfzyf/p/4105456.html 其实应该先做这题再做[BZOJ][3210]花神的浇花集会的吧…… 我们发现d ...

随机推荐

  1. Java简单示例-用户登录、单个页面的增删改查及简单分页

    index.html  -登录->stulist.jsp (index.html传递到LoginServlet,进行登录检测及写入session,NO返回index.html界面,OK 跳转到s ...

  2. EF唯一索引

    this.Property(p => p.Name) .IsRequired() .HasMaxLength()) .HasColumnAnnotation("Index", ...

  3. 给网页 title添加图片。

    在网页的title中添加 <link rel="shortcut icon" href="logo.png" /> 即可. 可以看下百度搜索的代码, ...

  4. session生命周期(一)

    Session存储在服务器端,一般为了防止在服务器的内存中(为了高速存取),Session在用户访问第一次访问服务器时创建,需要注意只有访问JSP.Servlet等程序时才会创建Session,只访问 ...

  5. PhpStorm 集成 开源中国(oschina.net)的Git项目,提交SVN时注意事项

    第一步:配置 git.exe File -> Default Settings -> Version Control -> Git -> Path go Git executa ...

  6. Mac Pro 资源管理器 Double Commander“个性化设置” 备份

    操作系统自带的资源管理器,总是有些别扭的地方,在 Windows 系统下,我一般用 Total Commander(破解版)来作为替代品.现在换为 Mac 系统,自带的 Finer 也不怎么好用,连最 ...

  7. css动画 animation

    今天用css做了一个简单的三角上下移动的一个小动画,说白了就是在改变该物体的height值.除了这个方法,还可以用js. 一.在用css写动画时,一定要记住兼容性问题.如何解决该兼容性?在前面加内核前 ...

  8. redis cluster php 客户端 predis

    php有redis的扩展,目前来说,还不支持redis cluster,推荐一下predis,功能比较全,从单个,到主从,到cluster都是支持的.效率怎么样,要靠自己去测试一下. 1,下载pred ...

  9. 精简的网站reset 和 css通用样式库

    参考链接:http://www.zhangxinxu.com/wordpress/2010/07/我是如何对网站css进行架构的/ reset.css body{ line-height:1.4; c ...

  10. SpringMVC拦截器

    springmvc的拦截器 需求:进行用户的访问控制,判断用户是否登陆,如果登陆进行正常访问,如果没有登陆跳转到登陆页面. 1自定义拦截器类 package org.guangsoft.utils; ...