POJ1068 Parencodings
来源:互联网 发布:断电mysql修复 编辑:程序博客网 时间:2024/05/18 03:47
题目大意: 给出一个整数表示有n组测试样例 每个样例包含两组数 一个整数m 和一个有m个元素的p数组
数组中的元素表示的意思为第i个' ) '之前有多少个' ( ' 。
要求输出一个w数组其元素表示的意思为在第i个’ ) ‘和它匹配的’(‘之间有多少组已匹配好的括号 (包括其自身)
例如
S(((()()())))P-sequence 4 5 6 6 6 6W-sequence 1 1 1 4 5 6根据题目意思只要依据p数组模拟出该括号字符串 再将w数组求出来即可
思路:输入p数组,可知每个’)'的位置在p[i]+i,便可求出s,然后从第i个‘)’的位置开始往前数,设c = 1,遇到‘)’则加一,遇到‘(’则减一,当c为0时该位置(设为j)即为与第i个“)”配对的“(”的位置,其间已配对好的括号数 = (p[i]+i-j+1)/2.
1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930
#include<string.h>#include<stdio.h>int main(){ int t, n, p[22]; char s[45]; scanf("%d",&t); while( t-- ) { memset(s, 0, sizeof(s)); scanf("%d",&n); int i; for(i = 1; i <= n; i++){ scanf("%d",&p[i]); s[p[i]+i] = ')'; } for(i = 1; i <= p[n]+n; i++) if(s[i] != ')') s[i] = '('; for(i = 1; i <= n; i++){ int j = p[i]+i, c = 1; while(c != 0){ j--; if(s[j] == ')') c++; else c--; } printf("%d ",(p[i]+i-j+1)/2); } printf("\n"); }}
0 0
- Parencodings poj1068
- POJ1068 Parencodings
- poj1068--Parencodings
- POJ1068-Parencodings
- POJ1068 Parencodings
- POJ1068-Parencodings
- poj1068 parencodings
- POJ1068 Parencodings
- POJ1068-Parencodings
- POJ1068-Parencodings
- poj1068 Parencodings
- POJ1068 Parencodings
- poj1068 Parencodings
- poj1068——Parencodings
- Parencodings POJ1068解题报告
- POJ1068浅析------Parencodings
- 北大ACM poj1068 Parencodings
- POJ1068《Parencodings》方法:模拟
- POJ 3268
- Problem E: AB编程题--世界杯小组赛
- 杀死进入死循环的进程
- C语言指针总结
- css 圆角写法
- POJ1068 Parencodings
- 225 Implement Stack using Queues
- 关于:after和:before伪类的用法,以及让浮动占据高度问题。
- The supeority of film faced plywood
- Scrapy框架 学习笔记2
- 作为计算机行业新人的思考
- git 使用整理
- PPT:阿里全息大数据构建与应用
- java使用ganymed-ssh2执行linux命令