题意:

一个含n个数的序列a,每两个相邻的数相减得到一个新数,这些数组成一个新的序列。

假设全部得到的序列都满足非严格的单调性。则原序列为nice series。假设给出的序列

本来不满足单调性。它是ugly series。否则输出k,表示前k个序列都满足单调性,第k+1不满足。

算法:

模拟合并和推断单调性,假设不优化会Tle.

假设去掉前导0和后导0,由于0-0还是0,省去一部分操作。

可是为了避免得到的下一个序列的推断有误,应该前后各留一个0.

比方:

7

1 1 1 3 5 7 9

第一次变换得到 0 0 2 2 2 2 -->满足单调性

第二次 假设全然忽略前导0 则下一个序列变为 0 0 0

而实际上应该是 0 2 0 0 0不满足单调性

#include<cstdio>
#include<iostream>
#include<cstring>
#define maxn 100010 using namespace std; typedef long long ll;
ll a[maxn]; int main()
{
int T,n;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%I64d",&a[i]);
int l = 1,r = n;
int k = 0,f1,f2;
for(int i=0;i<n;i++)
{
while(l<r && !a[l])
l++;
if(l>1) //因为把前导0和后导0去掉了,可能会影响下一轮的推断
l = l-1; //所曾经面留一个0
else l = 1; //本来就没有前导0
while(l<r && !a[r])
r--;
if(r<n-i)
r = r+1; //后面留一个0
else r = n-i; //本来就没有后导0
if(l>=r) break;
f1 = f2 = 0;
for(int d=l;d<r;d++)
{
if(a[d+1]>a[d]) //假设单调递增
f1 = 1;
if(a[d+1]<a[d]) //假设单调递减
f2 = 1;
}
if(f1 && f2) //既有单调递增的段也有递减的部分,即不满足单调性
{
if(k==0)
printf("ugly series\n");
else printf("%d\n",k-1);
break;
}
for(int j=l;j<r;j++)
a[j]=a[j+1]-a[j];
r--; //得到下一个序列,个数减一
k++;
}
if(!f1 || !f2)
printf("nice series\n");
}
return 0;
} /*
7
1 1 1 3 5 7 9
ans = 1
*/

hdu 4928 Series 2 (优化+模拟)的更多相关文章

  1. HDU 4928 Series 2

    有了题解以后这题就成了一个模拟题.不过写了好久才把它写对…… Sad #include <iostream> #include <cstdio> #include <cs ...

  2. HDU 4927 Series 1(推理+大数)

    HDU 4927 Series 1 题目链接 题意:给定一个序列,要求不断求差值序列.直到剩一个,输出这个数字 思路:因为有高精度一步.所以要推理一下公式,事实上纸上模拟一下非常easy推出公式就是一 ...

  3. HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011亚洲北京赛区网络赛)

    HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011 亚洲北京赛区网络赛题目) Eliminate Witches! Time Limit: 2000/1000 ...

  4. hdu 2829 Lawrence(斜率优化DP)

    题目链接:hdu 2829 Lawrence 题意: 在一条直线型的铁路上,每个站点有各自的权重num[i],每一段铁路(边)的权重(题目上说是战略价值什么的好像)是能经过这条边的所有站点的乘积之和. ...

  5. HDU 2920 分块底数优化 暴力

    其实和昨天写的那道水题是一样的,注意爆LL $1<=n,k<=1e9$,$\sum\limits_{i=1}^{n}(k \mod i) = nk - \sum\limits_{i=1}^ ...

  6. HDU 1014 Uniform Generator(模拟和公式)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1014 Uniform Generator Time Limit: 2000/1000 MS (Java ...

  7. 多重背包问题:悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(HDU 2191)(二进制优化)

    悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 HDU 2191 一道裸的多重背包问题: #include<iostream> #include<algorithm> #i ...

  8. HDU 5948 Thickest Burger 【模拟】 (2016ACM/ICPC亚洲区沈阳站)

    Thickest Burger Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  9. HDU 5920 Ugly Problem 【模拟】 (2016中国大学生程序设计竞赛(长春))

    Ugly Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

随机推荐

  1. 〖Linux〗不知谁写的,很实用的Linux命令

    第一部分 . sudo 运行上一条命令 sudo !! . HTTP方式共享当前目录 python -m SimpleHTTPServer . vim保存一个root用户文件 :w !sudo tee ...

  2. Hadoop-1.2.1学习之Job创建和提交源码分析

    在Hadoop中,MapReduce的Java作业通常由编写Mapper和Reducer開始.接着创建Job对象.然后使用该对象的set方法设置Mapper和Reducer以及诸如输入输出等參数,最后 ...

  3. 【BIRT】报表显示不全

    使用BIRT开发了一张报表,预期效果如下 但是开发完成后预览效果如下: 最后的合计竟然没有了,那么怎么处理呢 鼠标点击Layout窗口空白部分,找到布局,切换为自动布局,如下图所示:

  4. Nutch相关框架安装使用最佳指南(转帖)

    Nutch相关框架安装使用最佳指南 Chinese installing and using instruction  -  The best guidance in installing and u ...

  5. cocopods卸载、安装、重装等问题解决(转)

    今日在升级af库的时候,头脑发热把cocopods给卸载了,然后重装就出现了一些问题,主要是Mac ox s升级至10.11之后,好多命令都和以前不一样了,现在重新总结其安装步骤,如下: 一.全新安装 ...

  6. unity, destroy gameObject & destroy all children

    一,destroy gameObject 删除名为xxx的gameObject 错误方法1: Destroy(xxx); 以上方法之所以错误,是因为Destroy在下一帧才生效,而在本帧之内xxx还存 ...

  7. cocos2dx 3.3 异步加载纹理

    这里以3d场景加载为例,2d情况类似. 先同步加载模型数据和尺寸缩小了100倍的贴图,创建mesh.然后异步加载所有精细纹理并每加载完一个就替换一个,并进入场景. 如此做法的效果是当刚进入场景时看到的 ...

  8. Informix 語法

    1.修改表名稱 RENAME TABLE old_table_name TO new_table_name; 2.分頁 select  SKIP 0 FIRST 1 * from tablename ...

  9. mysql远程登录出错的解决方法

    mysql远程登录出错的情况,先比很多朋友都有遇到过吧,下面有个不错的解决方法,大家可以参考下. 错误:ERROR 2003 (HY000): Can't connect to MySQL serve ...

  10. Atitit.故障排除系列-----apache 不能启动的排除

    Atitit.故障排除系列-----apache 不能启动的排除 能直接使用cli启动httpd   ,,详细打印出信息.. C:\Users\ASIMO>"C:\wamp\apach ...