POJ 1068 Parencodings 模拟递归
http://poj.org/problem?id=1068
题意:P=每个右括号前面的左括号,W=每个右括号所在的括号包含的完整括号数,包括其本身。已知P,求W。
模拟题,将原括号按照数据呈现出来,用数组记录。
然后用递归求出W,递归的出口为右括号,当为左括号时,对s进行叠加,即所包含的括号数。为右括号时,记录下W,并返回一个s。
1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 using namespace std; 5 int p[100],w[100]; 6 char a[100]; 7 int i,j; 8 int f() 9 { 10 int s=1; 11 while(1) 12 { 13 if(a[j]=='(') 14 { 15 j++; 16 s+=f(); 17 } 18 else 19 { 20 w[i++]=s; 21 j++; 22 return s; 23 } 24 } 25 } 26 main() 27 { 28 int n,N,k,q; 29 scanf("%d",&N); 30 while(N--) 31 { 32 scanf("%d",&n); 33 for(q=0,k=0,i=0;i<n;i++) 34 { 35 scanf("%d",&p[i]); 36 for(j=0;j<p[i]-k;j++) 37 { 38 a[q]='('; 39 q++; 40 } 41 k=p[i]; 42 a[q++]=')'; 43 } 44 i=0;j=0; 45 f(); 46 for(i=0;i<n;i++) 47 { 48 printf("%d ",w[i]); 49 } 50 printf("\n"); 51 } 52 }
View Code
第二种:
根据 p 算出 每两个 右括号之间 有多少个 左括号,用 lp数组记录,然后 对每一个 右括号,往前搜索左括号
比如 p 4 5 6 6 6 6 ,那么 lp 值为 4 1 1 0 0 0
从第一个 右括号开始找,第一个对应 lp 第一个,发现lp不为 0 ,即将 lp-1,算出相应前面有多少个 右括号即可,若lp为 0 继续往前扫。。
1 #include<cstdio> 2 #include<cstring> 3 4 #define for if(0);else for 5 6 int p[25]={0}; 7 int lp[25]; 8 9 int main(){ 10 int t; 11 scanf("%d",&t); 12 while(t--){ 13 int n; 14 scanf("%d",&n); 15 for(int i=1;i<=n;i++){ 16 scanf("%d",&p[i]); 17 } 18 for(int i=1;i<=n;i++){ 19 lp[i]=p[i]-p[i-1]; 20 } 21 for(int i=1;i<=n;i++){ 22 int j=i; 23 while(!lp[j]&&j>1){ 24 j--; 25 } 26 lp[j]--; 27 printf("%d%c",i-j+1,i==n?'\n':' '); 28 } 29 } 30 return 0; 31 }
View Code
转载于:https://www.cnblogs.com/CrazyBaby/p/5685228.html
POJ 1068 Parencodings 模拟递归相关推荐
- poj 1068 Parencodings (模拟)
题意: 先输入右括号前左括号的数量 输出每个括号所含括号的数量(从左至右) 思路: 由于以前模拟题留下太大的阴影,比较凌乱:没想到今天 模拟1Y 虽然题简单点,就是用-1 1 模拟 括号 ,向前搜索 ...
- poj 1068 Parencodings
链接:poj 1068 题意: 1.p序列:当出现匹配括号对时,从该括号对的右括号開始往左数,直到最前面的左括号数,就是pi的值. 2.w序列:当出现匹配括号对时,包括在该括号对中的全部右括号数(包括 ...
- 栈模拟递归 遍历二叉树的正确写法
栈模拟递归 遍历二叉树的正确写法 二叉树的生成 树的层次遍历 前中后序遍历的递归实现 关于栈的实现 Reference 对于二叉树的生成,遍历,应该是树这个数据结构需要的基本功,只有真的理解了树的生成 ...
- poj 2395 prime的递归实现
题目链接:http://poj.org/problem?id=2395 求最小水桶的大小,每到达一个农村就能把水桶补满. 可见是用生成最小树,求最大边. 关于prime个人感觉用递归实现会少一个for ...
- poj 1102 LC-Display(模拟)
题目:http://poj.org/problem?id=1102 LC-Display Time Limit: 1000MS Memory Limit: 10000K Total Submiss ...
- poj 3077Rounders(模拟)
转载请注明出处:http://blog.csdn.net/u012860063? viewmode=contents 题目链接:http://poj.org/problem? id=3077 Desc ...
- LeetCode之报数(简单 模拟 递归)
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 111221 1 被读作 "one 1" ...
- 汉诺塔的非递归实现(借助堆栈模拟递归)
汉诺塔的非递归实现 借助堆栈以非递归(循环)方式求解汉诺塔的问题(n,a,b,c).即将n个盘子从起始柱(标记为"a")通过借助柱(标记为"b")移动到目标杜( ...
- POJ 1753 Flip Game(递归枚举)
题目:1753 题意:有一个4*4的棋盘,棋盘上有黑白格,每一次你可以翻其中的一个格子.一个格子(x,y)如果被翻,它相邻的前后左右四个格子(如果在棋盘上)也要翻转.现在给你一个初始的棋盘状态,问把这 ...
最新文章
- laravel学习资料整理
- reg怎样存取注册表信息
- 提权学习之旅——基础篇
- 通过Erlang构建TCP服务器
- Sentinel 1.7.2 发布,完善开源生态及扩展性
- web Worker简介、web Worker报错分析、作用
- 酷客多小程序实现小程序之间跳转功能,让小程序玩出新花样
- amlogic_android7.1的s905x平台长按按键5s清除数据和缓存的实现思路
- 让 Windows 的 R 用上 CUDA
- TServerSocket阻塞模式下Request-Response编程框架
- java proj4j 兰勃特投影设置地球半径 (+R )无效问题
- Windows原版系统下载地址
- 二维占用栅格地图Occupancy grid maps
- I2C详解(3) I2C总线的规范以及用户手册(2) I2C其他的总线协议以及总线速度
- python 页眉页脚_python自动化办公:玩转word之页眉页脚秘笈-阿里云开发者社区
- 网络舆情相关书籍推荐
- Android Gradle权威指南
- 小程序的服务通知(模板消息) 实现以及坑
- 【Access2007】Access2007的打开方式
- C++ Qt按钮切换页面