SWERC2014 PRO A

来源:互联网 发布:知乎偶遇外国帅哥 编辑:程序博客网 时间:2024/06/06 03:30

开始记录自己码的一路。

很简单的一道题目,先用java过了一下,竟然深搜了一路。。

import java.io.*;import java.util.*;// SWERC + GREAT = PORTOpublic 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 dfsf.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写个排列来做。

0 0
原创粉丝点击