题目
农夫约翰和奶牛贝茜喜欢在业余时间互相出数学题。
约翰给贝茜出了一道相当难的问题,导致她没能解决。
现在,她希望通过给约翰出一道有挑战性的难题来报复他。
贝茜给了约翰一个表达式 (B+E+S+S+I+E)(G+O+E+S)(M+O+O)
,其中包含七个变量 B,E,S,I,G,O,M
(O
是变量,不是零)。
对于每个变量,她给约翰一个列表,表中包含该变量可采用的最多 20
个整数值。
她要求约翰计算,共有多少种给变量赋值的方法可以使得表达式的计算结果为偶数。
代码
import java.util.*;
public class Main {
static int N = 100010;
static int n;
static Map<String, Integer>[] m = new Map[2];
static String q = "BESIGOM";
static int cnt = -1, ans = 0;
static int[] num = new int[10];
public static void bfs()
{
if(cnt == 6)
{
if((num[0] + num[3]) * (num[4] + num[5] + num[1] + num[2]) * num[6] % 2 == 0)
{
int M = m[num[6]].getOrDefault("M", 0);
int O = m[num[5]].getOrDefault("O", 0);
int G = m[num[4]].getOrDefault("G", 0);
int I = m[num[3]].getOrDefault("I", 0);
int S = m[num[2]].getOrDefault("S", 0);
int E = m[num[1]].getOrDefault("E", 0);
int B = m[num[0]].getOrDefault("B", 0);
int sum = M * O * G * I * S * E * B;
ans += sum;
}
// for(int i = 0; i < 7; i ++)
// System.out.print(num[i]);
// System.out.println();
return;
}
cnt ++;
for(int i = 0; i <= 1; i ++)
{
num[cnt] = i;
bfs();
}
cnt --;
return;
}
public static void main(String[] args) {
Scanner inScanner = new Scanner(System.in);
n = inScanner.nextInt();
m[0] = new TreeMap<String, Integer>();
m[1] = new TreeMap<String, Integer>();
for(int i = 1; i <= n; i ++)
{
String s = inScanner.next();
int v = inScanner.nextInt();
int t = Math.abs(v) % 2;
m[t].put(s, m[t].getOrDefault(s, 0) + 1);
}
inScanner.close();
bfs();
System.out.print(ans);
}
}