[蓝桥杯] 试题 算法训练 Anagrams问题

// http://lx.lanqiao.cn/problem.page?gpid=T223

Scanner in = new Scanner(System.in);

String a = in.nextLine().toLowerCase();
String b = in.nextLine().toLowerCase();
int[] alp = new int[26];

for (char ch : a.toCharArray())
    alp[ch - 'a']++;
for (char ch : b.toCharArray())
    alp[ch - 'a']--;

boolean ret = true;
for (int i : alp) {
    if (i != 0) {
        ret = false;
        break;
    }
}

System.out.println(ret ? "Y" : "N");

[蓝桥杯] 算法训练 审美课

// http://lx.lanqiao.cn/problem.page?gpid=T519
Scanner in = new Scanner(System.in);
int n = in.nextInt();// 学生数
int m = in.nextInt();// 图画数
int pattern = (1 << m) - 1;
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(n);
for (int i = 0; i < n; i++) {
    int num = 0;
    for (int j = 0; j < m; j++) {
        num <<= 1;
        if (in.nextInt() == 1) {
            num |= 1;
        }
    }
    map.merge(num, 1, Integer::sum);
}
int ret = 0;
for (Entry<Integer, Integer> e : map.entrySet()) {
    ret += e.getValue() * map.getOrDefault(~e.getKey() & pattern, 0);
}
System.out.println(ret / 2);