【51Nod1403】有趣的堆栈
来源:互联网 发布:淘宝上的小样是真是假? 编辑:程序博客网 时间:2024/06/09 19:16
大家都熟悉堆栈操作。一个堆栈一般有两种操作,push和pop。假设所有操作都是合法的并且最终堆栈为空。我们可以有很多方法记录堆栈的操作,
(1) 对每个pop操作,我们记录它之前一共有多少个push操作。
(2) 对每个pop操作,我们记录这个被Pop的元素曾经被压上了几个。
例如:操作push, push, pop, push, push, pop, push, pop, pop, pop
用第一种方法 记录为 2, 4, 5, 5, 5
用第二种方法 记录为 0, 0, 0, 2, 4
这两种记录方法可以互相转化,我们的问题是,给定第二种记录方法的序列,请求出第一种记录方法的序列。
Input
第一行一个整数n,表示序列的长度(0 < n <=1000000)
第二行n个整数,表示第二种方法的记录。
Output
一行,空格分隔的n个整数,表示第一种表示方法的序列。
Input示例
5
0 0 0 2 4
Output示例
2 4 5 5 5
题解
找下关系即可。这题居然卡头文件。
代码
#include<stdio.h> #include<cstring> using namespace std;inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}int n,sum,p[1000005],a[1000005],mx;bool flag[1000005];int main(){ n=read();sum=n; for (int i=1;i<=n;i++) a[i]=read(); for (int i=n;i;i--) { p[i]=sum-a[i]; flag[p[i]]=1; while (flag[sum]) sum--; } for (int i=1;i<=n;i++) { if (p[i]>mx) mx=p[i]; printf("%d ",mx); } return 0;}
阅读全文
0 0
- 【51nod1403】 有趣的堆栈
- 【51Nod1403】有趣的堆栈
- 51nod-1403 有趣的堆栈
- 51nod 1403 有趣的堆栈
- 51Nod-1403-有趣的堆栈
- 51Nod-1403 有趣的堆栈
- 有趣的堆栈
- 51nod 算法马拉松7 C.有趣的堆栈
- 51nod 1403 有趣的堆栈 (找规律题)
- 51单片机的堆栈
- 51单片机的堆栈
- 有趣的 CSS 题目(3): 层叠顺序与堆栈上下文知多少
- 有趣的
- 51nod1070(博弈,有趣的结论)
- 有趣的地方,有趣的东西!
- 有趣的生活,有趣的比赛
- 有趣的有趣的家庭菜园
- [JZOJ4296]有趣的有趣的家庭菜园
- 打开ServletRequest 类查看源代码出现 Unmatched braces in the pattern.
- 对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾
- centos与windows共享文件夹
- 深入理解java异常处理机制
- 187. Repeated DNA Sequences
- 【51Nod1403】有趣的堆栈
- 【框架】 Spring 69个精品详细解释
- 配置tomcat,访问http://localhost:8080/出现404错误
- eclipse git控件操作 回退到历史提交 重置 删除(撤销)历史的某次提交
- EasyMall项目重构之经典MVC
- 产品经理在早期如何快速学习?
- 脉冲同步器
- POJ2584 T-Shirt Gumbo【二分图多重匹配】
- java.lang.NoSuchMethodError: No virtual method checkSelfPermission,可是这个方法存在