poj_1068_Parencodings_解题报告
来源:互联网 发布:软件设计师教程txt 编辑:程序博客网 时间:2024/06/08 09:44
题目出处
题意:
对于字符串S有两种编码方式:
1. P-sequence:当遇到右括号时,记录下当前左边的所有左括号
2. W-sequence: 当遇到右括号时,记录下与当前右括号匹配的左括号内的右括号数,并包括自己
解法:模拟
思路:用了最简单直接的方法,首先将P-sequence编码转换为原始字符串S,再由原始字符串S转换为W-sequence编码
此题解法有待日后优化
代码:
/*360K 0MS*/#include <stdio.h>#include <string.h>int p[20];char S[100];void build(int *p, int n); //根据P还原字符串void getw_sequence(); //根据字符串得到Wint main(){int i;int t, n;scanf("%d", &t);while (t--){scanf("%d", &n);for (i = 0; i < n; i++)scanf("%d", &p[i]);build(p, n);getw_sequence();}return 0;}void build(int *p, int n){memset(S, '\0', sizeof(w));memset(S, '(', p[0]);S[p[0]] = ')';int i;int w_index = p[0] + 1;for (i = 1; i < n; i++){memset(&S[w_index], '(', p[i] - p[i-1]);w_index += p[i] - p[i-1];S[w_index++] = ')';}}void getw_sequence(){int i = 0;int n = 1;int k, num = 1; //num用做记录W中每当括号匹配时的右括号数while (S[i] != '\0'){if (S[i] == ')'){num = 1, n = 1; //每次发现右括号时,都需要将num和n置1k = i, k--;while (n != 0){if (S[k] == ')')n++, num++;if (S[k] == '(')n--;k--;}printf("%d ", num);}i++;}printf("\n");}
- poj_1068_Parencodings_解题报告
- 解题报告
- 解题报告
- 解题报告
- 解题报告
- 解题报告
- 解题报告
- 解题报告
- Antiprime解题报告
- expr解题报告
- 华容道解题报告
- tju解题报告
- zju1062/pku1095解题报告
- UsacoGate解题报告 --- 序曲
- ZJU 2060 解题报告
- ZJU 1331 解题报告
- ZJU 1115 解题报告
- ZJU1057解题报告
- mysql取系统当前时间的函数
- Linux CPU affinity
- linux c定位读取数据pread
- 键盘的各种类型
- ubuntu 12.04 apache2利用gnupg安装配置及加密邮件示例
- poj_1068_Parencodings_解题报告
- syscall - 间接系统调用
- 关于素数的算法
- git repo使用心得
- Unable to execute dex: Multiple dex files
- undefined reference to gettid
- HDU 1134 大数取模 使用大数模板
- 企业进行网络营销推广的技巧
- [面试] 找出数组中两个只出现一次的数字找出这两个只出现一次的数字