【51nod1403】 有趣的堆栈
来源:互联网 发布:业务流程数据化的例子 编辑:程序博客网 时间:2024/06/08 18:45
Description
大家都熟悉堆栈操作。一个堆栈一般有两种操作,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
这两种记录方法可以互相转化,我们的问题是,给定第二种记录方法的序列,请求出第一种记录方法的序列。
Solution
我们考虑第二种序列的第i个值x代表的含义。他指的是当前第i个数push和pop之间有多少个push和pop。那么对这之间的x+1个数(包括i)的pop,当前i的push都是有影响的,所以只要在i-x处+1。最后输出一下前缀和就好了。
Code
#include<iostream>#include<cmath>#include<cstring>#include<cstdio>#include<algorithm>using namespace std;const int maxn=1e6+5; int a[maxn],n,i,t,j,k,l,x,b[maxn];int dg(){ int x=0;char ch=getchar(); while (ch>='0' && ch<='9') x=x*10+ch-48,ch=getchar(); return x;}void dg1(int x){ if (x<=9){ putchar(x+'0');return; } dg1(x/10);putchar(x%10+'0');}int main(){ scanf("%d\n",&n); for (i=1;i<=n;i++) x=dg(),a[i-x]++; for (i=1;i<=n;i++) a[i]+=a[i-1],dg1(a[i]),putchar(' ');}
1 0
- 【51nod1403】 有趣的堆栈
- 【51Nod1403】有趣的堆栈
- 51nod-1403 有趣的堆栈
- 51nod 1403 有趣的堆栈
- 51Nod-1403-有趣的堆栈
- 51Nod-1403 有趣的堆栈
- 有趣的堆栈
- 51nod 算法马拉松7 C.有趣的堆栈
- 51nod 1403 有趣的堆栈 (找规律题)
- 51单片机的堆栈
- 51单片机的堆栈
- 有趣的 CSS 题目(3): 层叠顺序与堆栈上下文知多少
- 有趣的
- 51nod1070(博弈,有趣的结论)
- 有趣的地方,有趣的东西!
- 有趣的生活,有趣的比赛
- 有趣的有趣的家庭菜园
- [JZOJ4296]有趣的有趣的家庭菜园
- Html手记:表单标签
- R判断逻辑回归参数共线性
- 【51 Nod1378】夹克老爷的愤怒
- JavaEE Spring框架学习笔记(理论学习之通过@Autowired 自动装配注解的使用)
- Struts2文件下载
- 【51nod1403】 有趣的堆栈
- R语言画图-Error in get(getOption("device"))
- leetcode : Add Two Numbers
- 文章标题
- 数值分解
- 项目实战篇-餐馆管理系统—MFC,PHP,MySql:3.MFC端Person类及个人信息修改
- Android自定义简易照相机
- JS 10进制转其他进制
- mysql设置字符,不能启动的解决办法和注意事项