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
继续熟悉下数值范围
vc++
int 4字节
long 4字节 long long 8字节
采用位运算,注意此处使用long long 不然n>=16 只能得到32位结果
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 int a,b,c; 7 cin>>a; 8 for(int i=0;i<a;i++) 9 { 10 long long pare=0; 11 cin>>b; 12 for(int i=0;i<b;i++) 13 { 14 cin>>c; 15 pare^=long long (1)<<(c+i); 16 } 17 18 long long l,r; 19 for(int i=0;i<2*b;i++) 20 { 21 if((pare>>i)&1) 22 { 23 l=0,r=1; 24 for(int j=i-1;j>=0;j--) 25 { 26 if((pare>>j)&1) r++; 27 else l++; 28 if(l==r) 29 { 30 cout<<l<<" "; 31 break; 32 } 33 } 34 } 35 } 36 cout<<endl; 37 } 38 return 0; 39 }