結果
| 問題 | No.1909 Detect from Substrings |
| コンテスト | |
| ユーザー |
37zigen
|
| 提出日時 | 2022-04-22 21:41:03 |
| 言語 | Java (openjdk 23) |
| 結果 |
MLE
|
| 実行時間 | - |
| コード長 | 1,480 bytes |
| コンパイル時間 | 3,011 ms |
| コンパイル使用メモリ | 83,128 KB |
| 実行使用メモリ | 748,892 KB |
| 最終ジャッジ日時 | 2024-06-24 02:47:35 |
| 合計ジャッジ時間 | 26,057 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 8 MLE * 14 -- * 14 |
ソースコード
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Main implements Runnable { //Runnableを実装する
public static void main(String[] args) {
new Thread(null, new Main(), "", 16 * 1024 * 1024).start(); //16MBスタックを確保して実行
}
int dfs(char[][] str, char[] ans, int pos, int[] equiv) {
int ret=0;
if (pos==ans.length) return 1;
for (int i=0;i<26;++i) {
ans[pos]=(char)(i+'a');
boolean ok=true;
for (int j=0;j<str.length;++j) {
int add=0;
if (equiv[j] < str[j].length && ans[pos]==str[j][equiv[j]]) ++add;
ok &= (pos+1)-(equiv[j]+add) <= 1;
}
if (ok) {
int[] nequiv=Arrays.copyOf(equiv, equiv.length);
for (int j=0;j<str.length;++j) {
if (equiv[j] < str[j].length && ans[pos]==str[j][equiv[j]]) ++nequiv[j];
ok &= (pos+1)-nequiv[j] <= 1;
}
ret += dfs(str, ans, pos+1, nequiv);
}
}
return ret;
}
public void run() {
Scanner sc=new Scanner(System.in);
PrintWriter pw=new PrintWriter(System.out);
int N=sc.nextInt();
int M=sc.nextInt();
char[][] str=new char[N][M];
for (int i=0;i<N;++i) str[i]=sc.next().toCharArray();
int[] equiv=new int[M];
char[] ans=new char[M+1];
pw.println(dfs(str, ans, 0, equiv));
pw.close();
}
void tr(Object ... o) {System.out.println(Arrays.deepToString(o));}
}
37zigen