File tree Expand file tree Collapse file tree 1 file changed +46
-0
lines changed
Expand file tree Collapse file tree 1 file changed +46
-0
lines changed Original file line number Diff line number Diff line change 1+ ``` java
2+ import java.io.* ;
3+
4+ public class Solution {
5+ public static void main (String [] args ) throws IOException {
6+ BufferedReader br = new BufferedReader (new InputStreamReader (System . in));
7+
8+ int testCases = Integer . parseInt(br. readLine());
9+ for (int tc = 1 ; tc <= testCases; tc++ ) {
10+ String sequence = br. readLine();
11+ System . out. println(" #" + tc + " " + solve(sequence, sequence. length()));
12+ }
13+ }
14+
15+ private static int solve (String sequence , int length ) {
16+ int [][] dp = new int [16 ][length];
17+ final int MOD = 1_000_000_007 ;
18+
19+ int firstState = (1 << (sequence. charAt(0 ) - ' A' )) | 1 ;
20+ for (int state = 1 ; state <= 15 ; state++ ) {
21+ if ((state & firstState) == firstState) {
22+ dp[state][0 ] = 1 ;
23+ }
24+ }
25+
26+ for (int pos = 1 ; pos < length; pos++ ) {
27+ int currentPerson = 1 << (sequence. charAt(pos) - ' A' );
28+ for (int currState = 1 ; currState <= 15 ; currState++ ) {
29+ if ((currState & currentPerson) == currentPerson) {
30+ for (int prevState = 1 ; prevState <= 15 ; prevState++ ) {
31+ if (dp[prevState][pos- 1 ] > 0 && ((currState & prevState) > 0 )) {
32+ dp[currState][pos] = (dp[currState][pos] + dp[prevState][pos- 1 ]) % MOD ;
33+ }
34+ }
35+ }
36+ }
37+ }
38+
39+ int result = 0 ;
40+ for (int state = 1 ; state <= 15 ; state++ ) {
41+ result = (result + dp[state][length- 1 ]) % MOD ;
42+ }
43+ return result;
44+ }
45+ }
46+ ```
You can’t perform that action at this time.
0 commit comments