题目传送门

感觉不是很难,但是需要一些思考...

可以发现,贪心地向尽量大的区间添加,但是存在一些比较小的数,它们不需要再加了,就会从那个地方断成两个区间。所以刚开始想到的做法就是统计每一种数的数量,每一次加过之后就能知道现在的一排积木被分成了多少段,每一段都要单独来加一次。

但是,存在整个区间都不需要再加的情况,这个时候这种方法还是会把这个区间再加一次。

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<vector>
  4. #include<cstring>
  5. #include<queue>
  6. #include<map>
  7. #include<iostream>
  8. #include<stack>
  9. using namespace std;
  10. #define ll long long
  11. #define INF 0x3f3f3f3f
  12. #define N 10005
  13. int rd()
  14. {
  15. int f=,s=;char c=getchar();
  16. while(c<''||c>''){if(c=='-') f=-;c=getchar();}
  17. while(c>=''&&c<=''){s=(s<<)+(s<<)+(c^);c=getchar();}
  18. return f*s;
  19. }
  20. int n,cnt[N];
  21. ll ans=;
  22. int main()
  23. {
  24. int n=rd(),maxx=;
  25. for(int i=;i<=n;i++)
  26. {
  27. int tmp=rd();
  28. maxx=max(maxx,tmp);
  29. if(i!=&&i!=n) cnt[tmp]++;
  30. }
  31. int seg=;
  32. for(int i=;i<=maxx;i++)
  33. {
  34. ans+=seg;
  35. seg=seg-+cnt[i]+;
  36. }
  37. printf("%lld\n",ans);
  38. return ;
  39. }

Code

我们发现,一个区间最终需要加的次数等于这个区间中的最大值。把整个数列从递减的地方断开,分成若干个区间。区间中的最大值决定了区间被加的次数,而这个区间中的最小值也很重要,如果前面有数大于最小值的话,这个区间被加的次数的前 最小值 次都可以和上一个区间合并,可以省去 最小值 次。

就做完啦。

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<vector>
  4. #include<cstring>
  5. #include<queue>
  6. #include<map>
  7. #include<iostream>
  8. #include<stack>
  9. using namespace std;
  10. #define ll long long
  11. #define INF 0x3f3f3f3f
  12. #define N 10005
  13. int rd()
  14. {
  15. int f=,s=;char c=getchar();
  16. while(c<''||c>''){if(c=='-') f=-;c=getchar();}
  17. while(c>=''&&c<=''){s=(s<<)+(s<<)+(c^);c=getchar();}
  18. return f*s;
  19. }
  20. int n;
  21. ll ans=;
  22. int last=;
  23. int main()
  24. {
  25. int n=rd();
  26. for(int i=;i<=n;i++)
  27. {
  28. int tmp=rd();
  29. if(tmp<last) ans+=last,ans-=tmp,last=tmp;
  30. else last=tmp;
  31. }
  32. ans+=last;
  33. printf("%lld\n",ans);
  34. return ;
  35. }

Code

NOIp2018D1T1 积木大赛 【思维】的更多相关文章

  1. codevs 3288 积木大赛

    题目描述 Description 春春幼儿园举办了一年一度的"积木大赛".今年比赛的内容是搭建一座宽度为 n 的大厦,大厦可以看成由 n 块宽度为1的积木组成,第i块积木的最终高度 ...

  2. NOIP2013积木大赛

    题目描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木(可以看成 ...

  3. noip2013 积木大赛

    题目描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木(可以看成 ...

  4. [NOIP2013] 提高组 洛谷P1969 积木大赛

    题目描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木(可以看成 ...

  5. NOIp 2013 #1 积木大赛 Label:有趣的模拟

    题目描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木(可以看成 ...

  6. AC日记——积木大赛 洛谷 P1969

    题目描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木(可以看成 ...

  7. NOIP 2013 提高组 day2 积木大赛

      积木大赛 描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为 n 的大厦,大厦可以看成由 n 块宽度为1的积木组成,第

  8. [NOIp2013提高组]积木大赛/[NOIp2018提高组]铺设道路

    [NOIp2013提高组]积木大赛/[NOIp2018提高组]铺设道路 题目大意: 对于长度为\(n(n\le10^5)\)的非负数列\(A\),每次可以选取一个区间\(-1\).问将数列清零至少需要 ...

  9. LOJ2611. NOIP2013 积木大赛 【线段树】

    LOJ2611. NOIP2013 积木大赛 LINK 题目大意是给你一个目标状态数组 每次你可以选择一个连续区间加上一个值,求最小操作次数 我是神奇的脑子 最近做数据结构疯了 然后看见这题就数据结构 ...

随机推荐

  1. Machine Learning(Andrew Ng)学习笔记

    1.监督学习(supervised learning)&非监督学习(unsupervised learning) 监督学习:处理具有若干属性且返回值不同的对象.分为回归型和分类型:回归型的返回 ...

  2. Acwing-252-树(点分治)

    链接: https://www.acwing.com/problem/content/254/ 题意: 给定一个有N个点(编号0,1,-,N-1)的树,每条边都有一个权值(不超过1000). 树上两个 ...

  3. js 原生ajax请求

    什么是ajax 所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject). XMLHttpRequest 用于在后台与服务器交换数据.这意味着可 ...

  4. Eclipse 的 CheckStyle 插件

    Eclipse 的 CheckStyle 插件 1.简介 Checkstyle 是 SourceForge 下的一个开源项目,提供了一个帮助 JAVA 开发人员遵守某些编码规范的工具.它能进行自动化代 ...

  5. 题解 [SHOI2010]最小生成树

     题面 解析 看上去是黑题啊! 实际上也就是道网络流最大流. 当然,我们也知道网络流最关键的是建图. 首先,分析一下题目: 题目要求在操作后使给定的边lab一定在最小生成树上, 求最小的操作数. 先设 ...

  6. 【leetcode】1276. Number of Burgers with No Waste of Ingredients

    题目如下: Given two integers tomatoSlices and cheeseSlices. The ingredients of different burgers are as ...

  7. 初识java的算术运算符

    总所周知,算术运算符作为日常基本算法在我们上小学时接触到了,对加.减.乘.除熟练运用,这些基础算法也被引用到Java语言中.一般越基本的东西越重要,类比生活中的阳光,空气,水,土等... 闲话少叙,那 ...

  8. yum和rpm工具使用

    rpm命令 rpm -ivh package 安装 rpm -e package 卸载 rpm -Uvh 升级,如果已安装老版本,则升级;如果没安装,则直接安装 rpm -Fvh 升级,如果已安装老版 ...

  9. Lyft 基于 Flink 的大规模准实时数据分析平台(附FFA大会视频)

    摘要:如何基于 Flink 搭建大规模准实时数据分析平台?在 Flink Forward Asia 2019 上,来自 Lyft 公司实时数据平台的徐赢博士和计算数据平台的高立博士分享了 Lyft 基 ...

  10. python IO密集型为什么使用多线程

    IO密集型为什么使用多线程 python多线程,可以粗浅理解只用了cpu的一个核心. 为什么IO密集型用多线程?假设我们有多个线程都在发网络请求(request, 等response),一个请求的从发 ...