题意:

一个含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. Android 断点续传下载

    断点续传在面试中出现的概率还是比较大的,因为一般的应用都需要. 这个代码是从网上找来的,自己改了点东西,能跑通,但是这个代码并不是最优代码和设计.但是基本思路体现出来了,可以以这个为基础来进行修改.先 ...

  2. 安卓手机GPU OpenCL总结(转)

    前段时间,把市面上手机GPU OpenCL支持情况做了一个总结.总结如下: 目前,手机 GPU 市面有四个公司产品:Qualcomm, Imagination Technologies,ARM, Vi ...

  3. android中获取某段程序的执行时间

    Date   startDate   =   new   Date(System.currentTimeMillis()); 在收到设备返回数据之后添加如下语句: Date   endDate   = ...

  4. 基于Unity3D云人脸监測技术

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师.CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...

  5. JDBC 关于大文本数据

    大文本数据Clob,在不同的数据库中类型名不一致,有的是text格式,有的是clob,还有其他一些格式   package test; import java.io.BufferedReader; i ...

  6. 图片压缩兼修改md5

    概述 一个桌面程序,能修改图片的尺寸和质量,并且通过加水印的方式修改图片的md5等值. 详细 代码下载:http://www.demodashi.com/demo/13498.html 一.程序截图 ...

  7. LibRec:一个实现推荐系统的Java库包

    LibRec是一个用于实现推系统 RS 的Java库包,实现推荐系统的两个经典问题: rating prediction(评分排行预测) 和 item ranking (项目排行),其内置了经典的机器 ...

  8. python 中 numpy array 中的维度

    简介 numpy 创建的数组都有一个shape属性,它是一个元组,返回各个维度的维数.有时候我们可能需要知道某一维的特定维数. 二维情况 >>> import numpy as np ...

  9. Graphics View框架

    Qt4.2开始引入了Graphics View框架用来取代Qt3中的Canvas模块,并在很多地方作了改进,Graphics View框架实现了模型-视图结构的图形管理,能对大量图元进行管理,支持碰撞 ...

  10. atitit.attilax.com产品 软件项目通用框架类库总结

    atitit.attilax.com产品页面 1. 微信公众号后台服务系统 1 2. 视频图文发布与点播系统 1 3. 图片验证码自动识别 2 4. 手机短信验证码自动识别 2 5. 爬虫,数据采集, ...