51nod 1403 有趣的堆栈
来源:互联网 发布:后期修图软件 编辑:程序博客网 时间:2024/06/06 04:17
大家都熟悉堆栈操作。一个堆栈一般有两种操作,push和pop。假设所有操作都是合法的并且最终堆栈为空。我们可以有很多方法记录堆栈的操作,
(1) 对每个pop操作,我们记录它之前一共有多少个push操作。
(1) 对每个pop操作,我们记录它之前一共有多少个push操作。
(2) 对每个pop操作,我们记录这个被Pop的元素曾经被压上了几个。
对于第二种记录方式,上面压的个数,即为该元素的push和pop操作之间,另外push和pop的元素个数。也就是说,如果该元素pop的操作序列号为x,上面压了a个元素,那么其push的操作序列号为 x-a*2-1。所以从后往前扫一遍就行了。
另外,要用stdio.h,cstdio会超时。
//#include<bits/stdc++.h>#include<stdio.h>#include<cstring>using namespace std;const int MAXN=1000100;int a[MAXN],ans[MAXN<<1];void read(int&a){ char ch;while(!((ch=getchar())>='0')&&(ch<='9')); a=ch-'0';while(((ch=getchar())>='0')&&(ch<='9'))a*=10,a+=ch-'0';}inline void prin_d(int x){ if (x > 9) { prin_d(x / 10); } putchar(x % 10 + '0'); return ;}int main(){int n,i,now,cnt;while(~scanf("%d",&n)){for(i=1;i<=n;i++)read(a[i]);cnt=n;memset(ans,-1,sizeof(ans));for(i=n+n;i>=1;i--){if(~ans[i])continue;ans[i]=0;ans[i-(a[cnt]<<1)-1]=1;cnt--;} now=0;for(i=1;i<=n+n;i++){if(ans[i])now++;else{prin_d(now);printf(" ");}}printf("\n");}}
0 0
- 51nod-1403 有趣的堆栈
- 51nod 1403 有趣的堆栈
- 51Nod-1403-有趣的堆栈
- 51Nod-1403 有趣的堆栈
- 51nod 1403 有趣的堆栈 (找规律题)
- 51nod 算法马拉松7 C.有趣的堆栈
- 【51nod1403】 有趣的堆栈
- 【51Nod1403】有趣的堆栈
- 有趣的堆栈
- 51Nod 1289 大鱼吃小鱼(模拟 有趣)
- 51Nod 1246 罐子和硬币(有趣)
- 51nod 1420 数袋鼠好有趣
- 51nod 1420 数袋鼠好有趣
- 51Nod 1031 骨牌覆盖(Fibonacci 数列,有趣)
- 51nod oj 1420 数袋鼠好有趣【贪心】
- 51Nod-1420-数袋鼠好有趣
- 51nod 1420 数袋鼠好有趣【贪心】
- 51nod 1420 数袋鼠好有趣(贪心)
- 八数码问题
- Struts2的坑
- 寻找最长合法括号序列九度0J
- 恢复只读表空间
- Tomcat 虚拟路径配置
- 51nod 1403 有趣的堆栈
- python+beautifulsoup+smtp爬取学院网站的信息公告+邮件发送
- 值得学习的优秀楷模
- java基础--30.定时器--实现调度
- java基础--31.多线程常见的面试题
- 进程的基础知识点
- 【HIbernate框架学习】:Hibernate复合主键映射
- Android 应用加固?
- 博客开启之路