http://47.96.116.66/problem.php?id=1912

plw现在在一个仓库里当搬砖工,这个仓库存放的是n种不同颜色的砖块,颜色编号从1-n。plw突然兴起想堆一个墙,为了美观,plw决定按照1-n的颜色编号顺序从下往上垒成一列。
有一个传送带和仓库相连,传送带按照 a[1] a[2] … a[n] 的颜色顺序源源不断的送砖进来。
如果当前送进来的砖恰好是plw所需要的, plw就会把这个砖垒进墙内。否则plw就把这个砖放进一旁的次元栈里面,次元栈可以存放无数个砖。
每次plw新垒上一个砖后,他会看看次元栈的顶部的砖是不是所需要的(如果次元栈中有砖),如果是他就会从次元栈中取出这个砖,并且垒上去。
如果plw没办法得到想要的砖,plw就会开启传送带,传送带会送入下一个砖。
plw想知道他需要至少启动多少次传送带,才能完成目标。
启动一次传送带会送入一块砖。
PS:
假定plw无限高,身高为 INF.

输入

n <= 1e5
a[1] … a[n] 为1-n的排列。

输出

输出一个数,为需要多少个砖块。

样例输入

12
8 9 10 6 5 7 11 3 4 1 2 12

样例输出

48

思路:
这个题目基于天梯赛的彩虹瓶。
不同的是,会有源源不断的砖块运送进来。
在n=10的情况下, 输入顺序为 5 10 4 9 3 8 2 7 1 6 的基础上。
最后答案的砖块就会到了 n^2 的级别。
所以当n = 1e5的时候, 在最坏情况下砖块会有1e10个,所以不能直接模拟。

解法:
对于每一个砖记录下左边可以的第一块砖是哪一块,右边可用的第一块砖是那一块。
在没有取走任何砖的前提下,对于第i块砖来说, l[i] = i-1, r[i] = i+1,
然后我们枚举1-n颜色的砖在那些位置,拿完之后看一下l[i]\r[i]是不是所需要的砖,如果是就直接拿走,不是就直接从当前位置走到下一个位置。
在每次拿砖的时候,随时更新L[i], r[i]。
每次经过拿过的砖的时候,将L[i] 和 r[i] 还原为初始值。
这样一直模拟就可以了。

这道题要换一个思路模拟,我们直接计算出最小所用的整个循环的次数ans,前(ans-1)个循环是完全做完,最后一个只需要完成num[n],即可,每次判断左右是否合法,并且下一个大于r[j] ,不然就跳出循环重新做,记得每次经过还原l,r

#include<bits/stdc++.h>
#define fi first
#define se second
#define log2(a) log(n)/log(2)
#define show(a) cout<<a<<endl;
#define show2(a,b) cout<<a<<" "<<b<<endl;
#define show3(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl;
using namespace std;typedef long long ll;
typedef pair<ll, ll> P;
typedef pair<P, ll> LP;
const ll inf = 1e17 + 10;
const int N = 1e6 + 10;
const ll mod = 1e9+7;
const int base=131;
const double pi=acos(-1);
map<string, int>ml;int a[N],num[N],vis[N],l[N],r[N];
ll ans;
int n;
int main( )
{ios::sync_with_stdio(false);cin.tie(0);cin>>n;for(int i=1;i<=n;i++){cin>>a[i];num[a[i]]=i;l[i]=i-1;r[i]=i+1;}int cnt=1;for(int i=1;i<=n;i++){if(!vis[i]){//show(i);ans++;int now=i;int j=num[i];while(j<=n){//show2(now,j)l[j]=j-1;r[j]=j+1;if(a[j]==now){vis[now]=1;now++;while(a[l[j]]==now||a[r[j]]==now){if(a[l[j]]==now){l[j]--;vis[now]=1;now++;}else{r[j]++;vis[now]=1;now++;}}}if(num[now]<r[j]||now>n) break;j=num[now];}}}//ans--;cout<<ans*n-n+num[n]<<endl;}

ZSTU月赛 1912: 我好像不会做(模拟)相关推荐

  1. stm32蓝牙android,在STM32平台上实现蓝牙功能(好像是老外做的)

    资料介绍 STM32_BT\SAPP-FW-DEV-010\sapp\products\fw\code\BT_EVAL_B\Bluetooth_Lib\bt_core_stack_api.h .... ...

  2. PMP之路 – 第2天 (做模拟题)

    据说做第一遍PMP的模拟题,对的概率一般在20%左右,我花了大概3.5小时做了一遍试题,基本上没有感觉的或者一看题就不会的我就直接跳过去了.因此时间用的比较少一些.最后的结果还比较理想,200道题,错 ...

  3. 利用tcpcopy引流做模拟在线测试

    本文转自 http://www.searchtb.com/2012/05/using-tcpcopy-to-simulate-traffic.html 一.工具介绍 Tcpcopy是一个分布式在线压力 ...

  4. 职称计算机 只做模拟题,2017职称计算机考试Dreamweaver模拟练习题

    2017职称计算机考试Dreamweaver模拟练习题 Dreamweaver是一款使用的网站编辑器,它的使用操作能力是每一个职称计算机考试考生都应具备的能力,下面是小编给大家提供的职称计算机考试Dr ...

  5. [HNOI 2008] 神奇的国度 kingdom

    K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关系等等的存在.所谓N边关系 ...

  6. 浙江理工大学2019年4月赛

    Problem A 我不会做 比赛地址:http://47.96.116.66/problem.php?cid=1222&pid=0 补题地址:http://47.96.116.66/prob ...

  7. 第一篇学术演讲准备两个月,去了谷歌却做不了深度学习,听Facebook田渊栋谈人生挑战与选择...

    视学算法转载 来源:从零道一 (公众号ID:goto0011) 第一次 15 分钟的演讲准备了两个月.毕业就进谷歌却只能当螺丝钉.从研究员到研究经理面临角色转换-- 在最近的一次访谈中,Faceboo ...

  8. 如何做规划?分享2种思维和4个方法

    简介: 规划不只是高层的事.学会做规划,不仅可以让目标更聚焦,还能让我们清晰地知道今后要做什么.如何去做.在本篇文章中,提到了规划的2种思维模式,和作者自己在规划中用到的4个规划方法,希望让开始做规划 ...

  9. 计算机二级考试题有之前的吗,国家计算机二级上机做对前两题为什么过不了

    你是考C语言还是考VB呀,我们学校好像考C语言吧! 一.对于笔试: 二级VB考试的考题内容很细,没有复杂的算法题,最多只是一些看起来复杂(其实很有规律)的循环题.那么,我们要做的是: 1:按照大纲读懂 ...

最新文章

  1. c++字符前面的L和_T
  2. github 开源 代码 学习 集合(转载)
  3. HRBUST 1473 教主的遗产【状态压缩】
  4. vue echarts 柱状图
  5. Wox自制主题 - Material
  6. 浅谈Unity的渲染优化(1): 性能分析和瓶颈判断(上篇)
  7. python m3u8_python 实践应用(一)解析M3U8
  8. 修改yum源带来的问题 curl: (35) Cannot communicate securely with peer: no common encryption algorithm(s).
  9. div怎么在css中设置字体大小,根据div大小调整字体大小
  10. 三菱Plc怎么用c语言编程,如何用程序在三菱PLC上写出配方功能
  11. android相机实时滤镜,android 包含美颜等40余种实时滤镜相机
  12. 联发科发布MT7986方案支持Wi-Fi 6/6E
  13. (转)最优化问题简介
  14. vlc 视频局部放大【WPF版】
  15. 《大数据时代》---- 读书笔记
  16. 娱乐圈艺人最经典的死亡-值得怀念
  17. 工艺夹具-减速箱体零件工艺规程及加工φ52H8孔夹具设计(论文+说明书+工艺卡+外文翻译+CAD图纸)
  18. 肩部固定武器-市场现状及未来发展趋势
  19. Odoo与浪潮合资研发PS Cloud之如何导入带有类别和变体的产品
  20. 用 AXIOM 促进 XML 处理

热门文章

  1. 不用加减乘除符号的情况下实现加法运算(js代码)
  2. ie浏览器下载门户网站的excel文档出现乱码现象的解决办法
  3. ReactNative学习笔记(七)——ref属性的用法和可点击组件
  4. 单细胞测序数据的降维方法及细胞亚型鉴定聚类方法总结
  5. Ananagrams(map+vector)
  6. [转贴]改好DEBUG七处缺点的comexe实现报告
  7. 《MongoDB在信息资源共享建设的应用实践》
  8. Intermecnbsp;EasyCodernbsp;PD41条码打印…
  9. 北大计算机科学与技术保研率,北大信科---我的保研路
  10. ctf web 备份是个好习惯