Multiplication Table
Time Limit: 1000 MS Memory Limit: 65536 Kb |
Total Submission: 374 Accepted: 163 |
Description
定义于字母表S={a,b,c}上的乘法表如下
a | b | c | |
a | b | b | a |
b | c | b | a |
c | a | c | c |
Input
多组测试数据。每组测试由一行字符串组成(字符串长度小于等于15)。
Output
输出每组测试数据的加括号方式数,每组测试数据输出单独一行。
Sample Input
bbbba
Sample Output
6
import java.util.Scanner;
/**
* Created by DrownFish on 2016/11/20.
*/
public class Main {
public static void main(String args[]) {
Scanner s = new Scanner(System.in);
while(s.hasNext()) {
int a[][][] = new int[50][50][3];
String line = s.nextLine();
int n = line.length();
for (int i = 0; i < n; i++) {
a[i][i][line.charAt(i) - 'a'] = 1;
}
for (int m = 1; m < n; m++) {
for (int i = 0; i < n; i++) {
int j = i + m;
for (int k = i; k < j; k++) {
a[i][j][0] += a[i][k][0] * a[k + 1][j][2] + a[i][k][1] * a[k + 1][j][2] + a[i][k][2] * a[k + 1][j][0];
a[i][j][1] += a[i][k][0] * a[k + 1][j][0] + a[i][k][0] * a[k + 1][j][1] + a[i][k][1] * a[k + 1][j][1];
a[i][j][2] += a[i][k][1] * a[k + 1][j][0] + a[i][k][2] * a[k + 1][j][1] + a[i][k][2] * a[k + 1][j][2];
}
}
}
System.out.println(a[0][n - 1][0]);
}
}
}