很久没有做题了,这道题我用搜索加剪枝,很简单的
Code
/*
ID: sdjllyh1
PROG: crypt1
LANG: JAVA
complete date: 2008/11/16
author: LiuYongHui From GuiZhou University Of China
more article: www.cnblogs.com/sdjls
*/
import java.io.*;
import java.util.*;
public class crypt1
{
private static int[] digits = new int[10];
private static int n;
private static boolean[] exist = new boolean[10];
private static int total = 0;
public static void main(String[] args) throws IOException
{
init();
run();
output();
System.exit(0);
}
/*
d3 d2 d1
* d5 d4
-------------
p2 p1 p0
p5 p4 p3
-------------
p9 p8 p7 p6
*/
private static void run()
{
int[] p = new int[10];
for (int d1 = 0; d1 < n; d1++)
for (int d4 = 0; d4 < n; d4++)
{
p[0] = (digits[d4] * digits[d1]) % 10;
if (exist[p[0]])
{
for (int d2 = 0; d2 < n; d2++)
{
p[1] = ((digits[d4] * digits[d1]) / 10 + (digits[d2] * digits[d4])) % 10;
if (exist[p[1]])
{
for (int d3 = 0; d3 < n; d3++)
{
p[2] = ((digits[d4] * digits[d1]) / 10 + (digits[d2] * digits[d4])) / 10 + digits[d4] * digits[d3];
if ((p[2] != 0) && (p[2] < 10) && (exist[p[2]]))
{
for (int d5 = 0; d5 < n; d5++)
{
p[3] = digits[d5] * digits[d1] % 10;
p[4] = (digits[d5] * digits[d1] / 10 + digits[d2] * digits[d5]) % 10;
p[5] = (digits[d5] * digits[d1] / 10 + digits[d2] * digits[d5]) / 10 + digits[d5] * digits[d3];
if ((exist[p[3]]) && (exist[p[4]]) && (p[5] != 0) && (p[5] < 10) && exist[p[5]])
{
p[7] = (p[1] + p[3]) % 10;
p[8] = ((p[1] + p[3]) / 10 + p[2] + p[4]) % 10;
p[9] = ((p[1] + p[3]) / 10 + p[2] + p[4]) / 10 + p[5];
if ((exist[p[7]]) && (exist[p[8]]) && (p[9] != 0) && (p[9] < 10) && (exist[p[9]]))
{
total++;
}
}
}
}
}
}
}
}
}
}
private static void init() throws IOException
{
BufferedReader f = new BufferedReader(new FileReader("crypt1.in"));
StringTokenizer st = new StringTokenizer(f.readLine());
n = Integer.parseInt(st.nextToken());
st = new StringTokenizer(f.readLine());
for (int i = 0; i < n; i++)
{
digits[i] = Integer.parseInt(st.nextToken());
exist[digits[i]] = true;
}
f.close();
}
private static void output() throws IOException
{
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("crypt1.out")));
out.println(total);
out.close();
}
}
/*
ID: sdjllyh1
PROG: crypt1
LANG: JAVA
complete date: 2008/11/16
author: LiuYongHui From GuiZhou University Of China
more article: www.cnblogs.com/sdjls
*/
import java.io.*;
import java.util.*;
public class crypt1
{
private static int[] digits = new int[10];
private static int n;
private static boolean[] exist = new boolean[10];
private static int total = 0;
public static void main(String[] args) throws IOException
{
init();
run();
output();
System.exit(0);
}
/*
d3 d2 d1
* d5 d4
-------------
p2 p1 p0
p5 p4 p3
-------------
p9 p8 p7 p6
*/
private static void run()
{
int[] p = new int[10];
for (int d1 = 0; d1 < n; d1++)
for (int d4 = 0; d4 < n; d4++)
{
p[0] = (digits[d4] * digits[d1]) % 10;
if (exist[p[0]])
{
for (int d2 = 0; d2 < n; d2++)
{
p[1] = ((digits[d4] * digits[d1]) / 10 + (digits[d2] * digits[d4])) % 10;
if (exist[p[1]])
{
for (int d3 = 0; d3 < n; d3++)
{
p[2] = ((digits[d4] * digits[d1]) / 10 + (digits[d2] * digits[d4])) / 10 + digits[d4] * digits[d3];
if ((p[2] != 0) && (p[2] < 10) && (exist[p[2]]))
{
for (int d5 = 0; d5 < n; d5++)
{
p[3] = digits[d5] * digits[d1] % 10;
p[4] = (digits[d5] * digits[d1] / 10 + digits[d2] * digits[d5]) % 10;
p[5] = (digits[d5] * digits[d1] / 10 + digits[d2] * digits[d5]) / 10 + digits[d5] * digits[d3];
if ((exist[p[3]]) && (exist[p[4]]) && (p[5] != 0) && (p[5] < 10) && exist[p[5]])
{
p[7] = (p[1] + p[3]) % 10;
p[8] = ((p[1] + p[3]) / 10 + p[2] + p[4]) % 10;
p[9] = ((p[1] + p[3]) / 10 + p[2] + p[4]) / 10 + p[5];
if ((exist[p[7]]) && (exist[p[8]]) && (p[9] != 0) && (p[9] < 10) && (exist[p[9]]))
{
total++;
}
}
}
}
}
}
}
}
}
}
private static void init() throws IOException
{
BufferedReader f = new BufferedReader(new FileReader("crypt1.in"));
StringTokenizer st = new StringTokenizer(f.readLine());
n = Integer.parseInt(st.nextToken());
st = new StringTokenizer(f.readLine());
for (int i = 0; i < n; i++)
{
digits[i] = Integer.parseInt(st.nextToken());
exist[digits[i]] = true;
}
f.close();
}
private static void output() throws IOException
{
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("crypt1.out")));
out.println(total);
out.close();
}
}