POJ1068

来源:互联网 发布:我的世界天堂js怎么去 编辑:程序博客网 时间:2024/05/22 06:22

 题目:http://acm.pku.edu.cn/JudgeOnline/problem?id=1068

 思路:普通做法,构造出括号的数组,依次查找。。。

 

  1. import java.util.Scanner;
  2. public class Main {
  3.     int t;
  4.     int len;
  5.     int[] p;
  6.     int[] w;
  7.     String[] s;
  8.     int index;
  9.     int temp;
  10.     int pos;
  11.     public Main() {
  12.         Scanner scan = new Scanner(System.in);
  13.         t = scan.nextInt();
  14.         for (int i = 0; i < t; i++) {
  15.             len = scan.nextInt();
  16.             p = new int[len];
  17.             w = new int[len];
  18.             s = new String[len * 2];
  19.             for (int j = 0; j < len; j++) {
  20.                 p[j] = scan.nextInt();
  21.             }
  22.             pos = 0;
  23.             temp = 0;
  24.             index = 0;
  25.             for (int k = 0; k < len; k++) {
  26.                 for (; pos < p[k]; pos++) {
  27.                     s[index++] = "(";
  28.                 }
  29.                 s[index++] = ")";
  30.             }
  31.             search();
  32.             for (int m = 0; m < len; m++) {
  33.                 System.out.print(w[m] + " ");
  34.             }
  35.             System.out.println();
  36.         }
  37.     }
  38.     public void search() {
  39.         pos = 0;
  40.         int k = 0;
  41.         for (int i = 0; i < len; i++) {
  42.             for (; k < 2 * len; k++) {
  43.                 if (s[k].equals(")")) {
  44.                     pos = k;
  45.                     k++;
  46.                     break;
  47.                 }
  48.             }
  49.             temp = 0;
  50.             index = 1;
  51.             for (int j = pos - 1;; j--) {
  52.                 if (s[j].equals("(")) {
  53.                     temp++;
  54.                     index--;
  55.                 } else {
  56.                     index++;
  57.                 }
  58.                 if (index == 0) {
  59.                     w[i] = temp;
  60.                     break;
  61.                 }
  62.             }
  63.         }
  64.     }
  65.     public static void main(String[] args) {
  66.         new Main();
  67.     }
  68. }