POJ 1068-Parencodings(模擬-包含括號個數)
Parencodings
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 25510 | Accepted: 15016 |
Description
Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two different ways:
q By an integer sequence P = p1 p2...pn where pi is the number of left parentheses before the ith right parenthesis in S (P-sequence).
q By an integer sequence W = w1 w2...wn where for each right parenthesis, say a in S, we associate an integer which is the number of right parentheses counting from the matched left parenthesis of a up to a. (W-sequence).
Following is an example of the above encodings:
Write a program to convert P-sequence of a well-formed string to the W-sequence of the same string.
q By an integer sequence P = p1 p2...pn where pi is the number of left parentheses before the ith right parenthesis in S (P-sequence).
q By an integer sequence W = w1 w2...wn where for each right parenthesis, say a in S, we associate an integer which is the number of right parentheses counting from the matched left parenthesis of a up to a. (W-sequence).
Following is an example of the above encodings:
S (((()()()))) P-sequence 4 5 6666 W-sequence 1 1 1456
Write a program to convert P-sequence of a well-formed string to the W-sequence of the same string.
Input
The first line of the input contains a single integer t (1 <= t <= 10), the number of test cases, followed by the input data for each test case. The first line of each test case is an integer n (1 <= n <= 20), and the second line is the P-sequence of a well-formed
string. It contains n positive integers, separated with blanks, representing the P-sequence.
Output
The output file consists of exactly t lines corresponding to test cases. For each test case, the output line should contain n integers describing the W-sequence of the string corresponding to its given P-sequence.
Sample Input
2 6 4 5 6 6 6 6 9 4 6 6 6 6 8 9 9 9
Sample Output
1 1 1 4 5 6 1 1 2 4 5 1 1 3 9
Source
題目意思:
S (((()()()))) 括號表示
P-sequence 4 5 6 6 6 6 每個右括號前面的左括號數目
W-sequence 1 1 1 4 5 6 每對括號所包含的括號對數(包括其自身)
給出P序列,求其W序列。解題思路:
必須先提醒一句,這題的測試資料中,n肯定大於20(雖然給的範圍到20),一開始我開到21,直接RE…Orz
首先根據P序列還原出S序列:P[i]-P[i-1]是當前應在一個右括號前面插入的左括號數;
然後從前往後掃出未匹配的第一個右括號,再從當前位置往前掃出未匹配的第一個左括號;
最後在當前匹配的左右括號之間掃描已經匹配的括號數目,依次++即可。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
struct N
{
char c;//儲存'('或')'
bool vis;//判斷是否被訪問
int num;//c==')'時記錄其包含的括號數
} node[101];
int a[101];//坑爹測試資料,開21果斷RE…
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
memset(a,0,sizeof(a));
cin>>a[0];
int cnt=0;
for(int i=0; i<a[0]; ++i)//根據輸入還原S(即括號表示)並初始化
{
node[cnt].c='(';
node[cnt].vis=false;
node[cnt++].num=0;
}
node[cnt].c=')';
node[cnt].vis=false;
node[cnt++].num=0;
for(int i=1; i<n; ++i)
{
cin>>a[i];
for(int j=0; j<a[i]-a[i-1]; ++j)
{
node[cnt].c='(';
node[cnt].vis=false;
node[cnt++].num=0;
}
node[cnt].c=')';
node[cnt].vis=false;
node[cnt++].num=0;
}
/*for(int i=0; i<cnt; ++i)//輸出S
cout<<node[i].c<<" ";
cout<<endl;*/
bool flag=true;//判斷當前是否仍有未匹配的括號
while(flag)
{
flag=false;
for(int i=1; i<cnt; ++i)//右括號‘)’
if(node[i].c==')'&&node[i].vis==false)
for(int j=i-1; j>=0; --j)//左括號‘(’
if(node[j].c=='('&&node[j].vis==false)
{
node[j].vis=node[i].vis=true;
node[i].num=1;
flag=true;
int k;
for(k=j; k<i; ++k)
if(node[k].c==')'&&node[k].vis==true)
++node[i].num;//計算包含的括號數
break;
}
}
for(int i=0; i<cnt; ++i)
if(node[i].c==')')
cout<<node[i].num<<" ";
cout<<endl;
}
return 0;
}
/*
2
6
4 5 6 6 6 6
9
4 6 6 6 6 8 9 9 9
*/
相關文章
- LeetCode-20. 有效的括號(棧模擬)LeetCode
- POJ 2955-Brackets(括號匹配-區間DP)Racket
- JavaScript中圓括號()和方括號[]的一個特殊用法JavaScript
- Parencodings(POJ 1068)(模擬)Encoding
- 理解正規表示式中的括號 (),方括號 [] 和大括號 {}
- POJ 2259 Team Queue【模擬佇列】佇列
- 用Java的方式模擬Flutter的Widget的實現(多層括號巢狀)JavaFlutter巢狀
- 括號匹配;及找數字續分析
- POJ——1016Parencodings(模擬)Encoding
- POJ 3106Flip and Turn(模擬)
- POJ-2136 Vertical Histogram-用*號統計字母個數Histogram
- leecode856.括號中的分數
- 括號畫家
- 【棧】括號匹配
- c++物件建立帶括號與無括號的區別C++物件
- Shell 括號總結
- Swift之花括號Swift
- 最長有效括號
- 【題解】括號序列
- C4top-N個數求和 (分數求和模擬)
- 正則中括號點符號符號
- JavaScript函式多個小括號連續呼叫JavaScript函式
- JSON 字串中的中括號和大括號區別詳解JSON字串
- JavaScript 函式呼叫時帶括號和不帶括號的區別JavaScript函式
- Matlab中的括號()[]{}Matlab
- 每日一題: 有效括號每日一題
- 20. 有效的括號
- Terminator:一款一個視窗包含多個終端的 Linux 終端模擬器Linux
- POJ 1850 Code/POJ 1496 Word Index(組合數學-字母串序號)Index
- [leetcode]有效的括號LeetCode
- [PHP字串]②--花括號{}的作用PHP字串
- ACM 括號配對問題ACM
- 22. 括號生成-c++C++
- 力扣 22. 括號生成力扣
- [C++]括號使用小技巧C++
- {{rateTime}}大括號裡面的數字轉換為字串(日期)字串
- mysql 中資料型別tinyint(2)括號中的數字意思MySql資料型別
- ajax傳遞的引數值包含單引號