开始记录自己码的一路。
很简单的一道题目,先用java过了一下,竟然深搜了一路。。
import java.io.*;
import java.util.*;
// SWERC + GREAT = PORTO
public class Main {
public static void main(String[] args) throws IOException{
Test t = new Test();
t.traiter();
}
}
class Test{
BufferedReader f;
// PrintWriter out;
boolean[] use = new boolean[10];
int n, count = 0;
//String[] data;
boolean[] head = new boolean[27];
int[][] data = new int[11][11];
long[] value = new long[11];
int[] map = new int[27];
void traiter() throws IOException{
// f = new BufferedReader(new InputStreamReader(System.in));
f = new BufferedReader(new InputStreamReader(System.in));
// out = new PrintWriter(new BufferedWriter(new FileWriter("A.out")));
// step 1 read data
read();
// step 2 dfs
f.close();
// out.close();
}
void dfs(int rang, int pos){
if(rang == n && pos >= 11){
judge();
return;
}
if(pos >= 11){
dfs(rang+1,1);
return;
}
if(data[rang][pos]==0){
dfs(rang, pos+1);
return;
}
int tmp = data[rang][pos]; long cur;
if(map[tmp]!=-1){
cur = value[rang];
value[rang] = value[rang]*10+map[tmp];
dfs(rang,pos+1);
value[rang] = cur;
return;
}
for(int i = 0; i<=9; i++){
if(i==0 && head[tmp])
continue;
if(use[i])
continue;
cur = value[rang];
value[rang] = value[rang]*10+i;
map[tmp] = i;
use[i] = true;
// System.out.println(tmp+" go to be "+i);
dfs(rang,pos+1);
use[i] = false;
map[tmp] = -1;
value[rang] = cur;
}
}
void judge(){
long sum=0;
for(int i = 1; i<n; i++)
sum+=value[i];
if(sum == value[n])
count++;
}
void read() throws IOException{
String s = f.readLine();
while(s!=null){
// System.out.println(s);
n = Integer.parseInt(s);
for(int i = 1; i<=n; i++){
s = f.readLine();
data[i][0] = s.length();
for(int j = 0; j<s.length(); j++)
data[i][10-j] = s.charAt(s.length()-1-j)-'A'+1;
head[s.charAt(0)-'A'+1] = true;
}
Arrays.fill(map, -1);
dfs(1,1);
System.out.println(count);
s = f.readLine();
for(int i = 0; i<=n; i++){
Arrays.fill(data[i], 0);
}
Arrays.fill(head, false);
Arrays.fill(use, false);
Arrays.fill(value, 0);
Arrays.fill(map, -1);
count=0;
}
}
}知道自己写的烂。。想用c++或者java写个排列来做。
本文分享了一段从使用Java解决简单问题的旅程,通过深入搜索算法来解决问题的过程。作者反思了代码的效率,并计划尝试C++或Java的排列方法来优化解决方案。文中详细阐述了类结构、方法实现以及输入输出处理流程。

2000

被折叠的 条评论
为什么被折叠?



