Life of xhu

About

HOJ_1321 & HOJ_1331

Feb 09, 2014

  |   #HOJ

1321: 题意就是有两种方式来加密一个括号序列,其中两种方式的排列方式说明是这么个意思

  1. 如果按P方式排序,Pi代表的是从左向右第i个右括号之前有Pi个左括号;
  2. 如果按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的值,很简单,用setwsetprecision控制一下输出格式就行了,代码如下:

#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;
    }
}