zoj 1004

1. 枚举可能出现的堆进出序列

2. 测试序列是否满足要求

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4     static boolean next(char[] arr) {
 5         int c = 0;
 6         int p = arr.length - 1;
 7 
 8         while (p > 0) {
 9             if (arr[p] == 'i') {
10                 if (p < arr.length - 2 && arr[p + 2] == 'o') {
11                     arr[p] = 'o';
12                     arr[p + 1] = 'i';
13                     p++;
14                     while (++p < arr.length) {
15                         if (c > 0) {
16                             arr[p] = 'i';
17                             c--;
18                         } else {
19                             arr[p] = 'o';
20                         }
21                     }
22                     return true;
23                 } else {
24                     c++;
25                 }
26             }
27             p--;
28         }
29 
30         return false;
31 
32     }
33 
34     static boolean check(char[] str1, char[] str2, char[] arr) {
35         char[] stack = new char[str1.length];
36         int p = 0;
37         int cstr = 0, ctmp = 0;
38         char[] tmp = new char[str1.length];
39         for (int i = 0; i < arr.length; i++) {
40             if (arr[i] == 'i') {
41                 stack[p++] = str1[cstr++];
42             } else {
43                 tmp[ctmp++] = stack[--p];
44             }
45         }
46         for (int i = 0; i < tmp.length; i++) {
47             if (tmp[i] != str2[i])
48                 return false;
49         }
50         return true;
51     }
52 
53     public static void main(String[] args) {
54 
55         Scanner sc = new Scanner(System.in);
56         while (sc.hasNext()) {
57             char[] str1 = sc.next().toCharArray();
58             char[] str2 = sc.next().toCharArray();
59             int len = str1.length;
60             char[] arr = new char[len * 2];
61             for (int i = 0; i < str1.length; i++) {
62                 arr[i] = 'i';
63             }
64             for (int i = str1.length; i < str1.length * 2; i++) {
65                 arr[i] = 'o';
66             }
67             System.out.println('[');
68             do {
69 
70                 if (check(str1, str2, arr)) {
71                     String tmp = "";
72                     for (int i = 0; i < arr.length; i++) {
73                         tmp += arr[i] + " ";
74                     }
75                     System.out.println(tmp);
76 
77                 }
78             } while (next(arr));
79             System.out.println(']');
80         }
81     }
82 }

 

posted @ 2013-03-27 14:56  rqg  阅读(145)  评论(0编辑  收藏  举报