这道题目的题意就是使用题目中所给的Gate 函数,模拟出输入的结果

当然我们分析的时候可以倒着来,就是拿输入去减

每次Gate 函数都会有一个有效范围

这道题目求的就是,找出一种模拟方法,使得最小的有效范围最大化。

是一道【贪心】题

参考了https://github.com/boleynsu/acmicpc-codes 的做法

b 数组中存放是 Sequence 的下标
这是一个O(n)的算法if (a[i-1]<a[i]){int k=a[i]-a[i-1];while (k--) b[++bt]=i;
}
就是把 i 加进 b 数组,加 a[i] - a[i - 1]次
比如 a[i - 1] 为3 a[i] 为 5
那么在 b[ ] 中就会加两次 3 else if (a[i-1]>a[i]){int k=a[i-1]-a[i];while (k--){++bh;}answer = min(answer,i - b[bh - 1]);
}
bh 指针右移 k 次, 由于b 数组为非递减数组,故最后一位一定是最大的
取i - b[bh - 1] 与 answer比较,这个意思就是比较 Gate 函数的有效范围
如果有更小的范围,那么更新一遍
这里的 i 就是当前的位置, b[bh - 1]的意思……

  

//#pragma comment(linker, "/STACK:16777216") //for c++ Compiler
#include <stdio.h>
#include <iostream>
#include <cstring>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <algorithm>
#define ll long long
#define Max(a,b) (((a) > (b)) ? (a) : (b))
#define Min(a,b) (((a) < (b)) ? (a) : (b))
#define Abs(x) (((x) > 0) ? (x) : (-(x)))
using namespace std;const int MAXN = 2000000;int N;
int a[MAXN];
int b[MAXN];
int bh,bt;int main(){int T;scanf("%d",&T);while (T--){scanf("%d",&N);for (int i=1;i<=N;i++)scanf("%d",a+i);bh=0,bt=-1;int answer=N;a[0]=a[N+1]=0;for (int i=1;i<=N+1;i++){if (a[i-1]<a[i]){int k=a[i]-a[i-1];while (k--) b[++bt]=i;}else if (a[i-1]>a[i]){int k=a[i-1]-a[i];while (k--){++bh;}answer = min(answer,i - b[bh - 1]);}}printf("%d\n",answer);}
}

当然在这里,也有一种更简单的方法也能过,不知道是不是算是数据水呢

#include<stdio.h>
int main(){int t, n, i, j, k, cnt;int a[10010], ans;scanf("%d",&t);while(t--){scanf("%d",&n);for(i = 1; i <= n; ++i){scanf("%d",&a[i]);}i = 1;ans = 0x3f3f3f3f;while(i <= n){j = i;while(a[j+1] >= a[j]){--a[j];++j;}--a[j];cnt = j - i + 1;if(cnt < ans)ans = cnt;while(a[i] == 0)++i;}printf("%d\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/wushuaiyi/p/4236406.html

HDU 3916 Sequence Decomposition 【贪心】相关推荐

  1. HDU - 5919 Sequence II——主席树+区间种类++逆序建树

    [题目描述] HDU - 5919 Sequence II [题目分析] 题目给定一个数组,每次查询一个区间,找出区间内不同数字的个数x,然后输出按出现顺序第x/2向上取整个数字的位置. 按照要求,我 ...

  2. HDU 3397 Sequence operation(线段树)

    HDU 3397 Sequence operation 题目链接 题意:给定一个01序列,有5种操作 0 a b [a.b]区间置为0 1 a b [a,b]区间置为1 2 a b [a,b]区间0变 ...

  3. hdu 3397 Sequence operation(线段树,lazy,区间合并)

    hdu 3397 Sequence operation 线段树lazy和区间合并结合的一个题,相当于几个题集中到一起嘛,分开想就好了 0,1,2操作都要lazy,2的异或操作找到每一只含1或只含0的区 ...

  4. 【HDU - 5014】Number Sequence(贪心构造)

    题干: There is a special number sequence which has n+1 integers. For each number in sequence, we have ...

  5. 2017 多校训练第二场 HDU 6047 Maximum Sequence(贪心+优先队列)

    Maximum Sequence Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. hdu 4915 Parenthese sequence(贪心,模拟)

    题目: Parenthese sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Jav ...

  7. HDU 5919 Sequence II 主席树

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5919 Sequence II Time Limit: 9000/4500 MS (Java/Othe ...

  8. HDU 4714 Tree2cycle:贪心

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4714 题意: 给你一棵树,添加和删除一条边的代价都是1.问你将这棵树变成一个环的最小代价. 题解: 贪 ...

  9. hdu 5312 Sequence(数学推导——三角形数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5312 Sequence Time Limit: 2000/2000 MS (Java/Others)  ...

最新文章

  1. VLOG丨树莓派Raspberry Pi 3安装PLEX并挂载USB硬盘打造最牛的微型家庭影音服务器2018...
  2. zookeeper学习总结
  3. 《视频直播技术详解》系列之二:采集
  4. 小程序开发时能否使用我们自定义的字体图标
  5. 基于.NET实现数据挖掘--关联规则分析算法
  6. java 判断字符串是否是整数
  7. 16.4 多模态情感识别
  8. Cesium:解决画线不光滑,模糊不清,锯齿状
  9. 拓端tecdat|R语言动态可视化:制作历史全球平均温度的累积动态折线图动画gif视频图
  10. 微信撤回软件安卓版_微信强制撤回软件下载-微信强制撤回消息工具(不限时间)v1.0安卓版_5577安卓网...
  11. 【jzoj1747】马蹄印
  12. 跟随鼠标移动-demo
  13. 动态生成的chosen实现模糊查询
  14. 16位院士加盟!“双一流”上海大学成立人工智能研究院
  15. 基于微信小程序的校园食堂窗口自助点餐系统#毕业设计
  16. 科研热点|警惕!10月WOS数据库更新,这2本期刊被剔除SCI~
  17. 国内消防报警主机调试软件
  18. 如何将PDF删除水印?PDF删除水印的方法
  19. django login logout request使用
  20. ios开发---音乐播放器之怎么获取音乐列表

热门文章

  1. SparkStreaming -Kafka数据源
  2. 错误: 找不到或无法加载主类 org.apache.flume.tools.GetJavaProperty
  3. 【JS 逆向百例】复杂的登录过程,最新微博登录逆向
  4. 永恒边境白羊座服务器维护,永恒边境升级攻略 速升50级技巧
  5. 【牛客 - 82B】区间的连续段(贪心,建图,倍增)
  6. 【ZOJ - 3778】Talented Chef(贪心)
  7. 安卓上传文件php失败,android - php上传图片时 $_FILES为空
  8. linux多线程编程和linux 2.6下的nptl,Linux多線程編程和Linux 2.6下的NPTL
  9. mysql 查看集群状态_MySQL数据库集群正确配置步骤
  10. 金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-(一千零一拾一元整)输出。...