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

// 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);

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据