poj 1068 括号匹配
来源:互联网 发布:e4a磁力解析源码 编辑:程序博客网 时间:2024/06/03 06:41
题意:p序列代表当前右括号的坐标有多少左括号,w序列代表了当前右括号和它匹配的左括号之间有多少个右括号(包括当前右括号)
思路:找到右括号的位置,模拟匹配过程。
#include<iostream>using namespace std;int main() { int p[30],w[30],s[60];//s是括号序列 0代表"(" 1代表")" bool flag[60]; int T , t; scanf("%d",&T); while (T --) { scanf("%d",&t); int left = 1 , j = 1; for(int i = 1 ; i <= t ; i ++) { scanf("%d",&p[i]); while (left <= p[i]) { left ++; s[j++] = 0; } s[j++] = 1; } //for (int i = 1 ; i <= t*2 ; i ++) { // printf("%d ",s[i]); //} memset(flag,0,sizeof(flag)); int sum = 0; int g = 0; for (int i = 1 ; i <= t*2 ; i ++) { if (s[i] == 1) { //找到一个右括号 sum = 0; if (!flag[i]) {//并且没有进行匹配的 flag[i] = 1;//标记成已经匹配 for (j = i - 1 ; j > 0 ; j --) {//往回找 满足条件与之匹配的左括号 if (flag[j]==0&&s[j]==0) { flag[j] = 1;//标记成已经匹配 for (int k = j ; k <= i ; k ++) {//从匹配的左括号 到这个右括号之间,看有多少个已经匹配的右括号(包含这个右括号) if (flag[k]==1&&s[k]==1) { sum ++; } } w[g++] = sum; break; } } } } } for (int i = 0 ; i < t - 1 ; i ++) { printf("%d ",w[i]); } printf("%d\n",w[t-1]); } }
- poj 1068 括号匹配
- POJ 1068 括号匹配问题
- POJ 1068 Parencodings 模拟-括号匹配
- poj 3991(括号匹配)
- poj 1141 括号匹配
- POJ 3991 括号匹配问题
- POJ 1141 括号匹配 DP
- poj 2955 Brackets(括号匹配)
- POJ 1068--Parencodings--括号逆匹配(模拟)
- 动态规划 :POJ 1141 括号匹配
- poj 1141 Brackets Sequence 完全括号匹配
- poj 1141 Brackets Sequence 括号匹配
- poj 1141 Brackets Sequence 括号匹配
- poj 2955 动态规划--括号匹配
- POJ 2955 括号匹配,区间DP
- POJ 2955 Brackets 括号匹配 区间DP
- poj 2955 区间dp 括号匹配
- POJ 1141 括号匹配加强版
- LINUX 下 GDB 调试 ( 转载 )
- GDB 、 LINUX 下 GDB 调试 小结---->基础知识!
- Linux下静态库和动态库的创建和使用( 转载 )
- C下的链表的静态,动态创建,删除,插入
- makefile:中文版最权威的makefile文档( 转载 )
- poj 1068 括号匹配
- Keycode对照表
- poj 2485 秒杀
- 使用ImageMagick快速制作开机启动logo
- signed与unsigned的问题
- HOG特征-理解篇
- SQLite的基本使用介绍【教程5--图解】
- coreconnect总线时序
- Linux 查看机器配置信息