1321
: 题意就是有两种方式来加密一个括号序列,其中两种方式的排列方式说明是这么个意思
- 如果按
P
方式排序,Pi
代表的是从左向右第i
个右括号之前有Pi
个左括号; - 如果按
W
方式排序,Wi
代表的是从左向右第i
个右括号与其对应的左括号之间包含Wi
个右括号(包括第i
个右括号)。
题目要求的是,根据给出的P
序列,推测出这个能代表这些括号的W
序列,很简单,根据P序列得到括号序列再遍历计算即可,注意一下输出格式即可,代码如下:
#include <iostream>
using namespace std;
int main(){
int t, n, input, count, tmp, first_right, num_right;
char parentheses[50];
cin >> t;
while(t--){
cin >> n;
count = 0;
tmp = 0;
for(int i = 0; i < n; i++){
cin >> input;
if(i == 0)
first_right = input;
for(int i = 0; i < input - tmp; i++)
parentheses[count++] = '(';
parentheses[count++] = ')';
tmp = input;
}
for(int i = first_right; i < count; i++){
if(parentheses[i] == ')'){
num_right = 1;
for(int j = i - 1; j >= 0; j--){
if(parentheses[j] == '.')
num_right++;
else if(parentheses[j] == '('){
parentheses[j] = ' ';
break;
}
}
parentheses[i] = '.';
if(i < count - 1)
cout << num_right << ' ';
else
cout << num_right;
}
}
cout << endl;
}
}
1331
: 这道题意思没看懂,但是根据例子一下子就推出了要干什么,就是求1/2+1/4+...+1/2*i
的值,很简单,用setw
和setprecision
控制一下输出格式就行了,代码如下:
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
cout << "# Cards Overhang" << endl;
int input;
double sum;
while(cin >> input && input != EOF){
sum = 0;
for(double i = 1.0; i <= input; i += 1.0)
sum += 1 / (i * 2);
cout << fixed << setw(5) << input << setw(10) << setprecision(3) << sum << endl;
}
}