Problem:
A: 間違い探し

問題

縦に N マス、横に M マスある長方形の盤面 A, B が与えられます。各盤面について、それぞれのマスは白または黒で塗られています。

盤面 X の i 行 j 列目のマスの色を C(i, j, X) と表記することにします。

以下の条件を満たす整数の組 (i, j) がいくつあるか数えてください。

1 \leq i \leq N

1 \leq j \leq M

C(i, j, A) \neq C(i, j, B)

入力形式

N M
A_1
...
A_N
B_1
...
B_N

A_i (1 \leq i \leq N) の j 文字目が # のときは C(i, j, A) が黒、. のときは C(i, j, A) が白であることを表します。B についても同様です。

制約

1 \leq N, M \leq 2,000

|A_i| = |B_i| = M

A_i, B_i は # と . のみからなる文字列

出力形式

答えを一行に出力してください。

入力例1

2 3
..#
##.
.##
#..

出力例1

2

入力例2

7 28
............................
...#.....###...####....###..
..#.#...#...#..#...#..#...#.
.#...#..#......####...#.....
.#####..#...#..#......#...#.
.#...#...###...#.......###..
............................
............................
..###....###.....##....###..
.#...#..#...#...#.#...#...#.
...##...#...#.....#....####.
..#.....#...#.....#.......#.
.#####...###....####...###..
............................

出力例2

40

Solution in C (judge verdict: Accepted)

// AOJ 3107 Spot The Difference
// 2019.9.23 bal4u

#include <stdio.h>

//// 入出力関係
#if 1
#define gc() getchar_unlocked()
#define pc(x) putchar_unlocked(x)
#else
#define gc() getchar()
#define pc(x) putchar(x)
#endif

int in() {  // 整数の入力
	int n = 0, c = gc();
	do n = 10*n + (c & 0xf), c = gc(); while (c >= '0');
	return n;
}

void ins(char *s) { // 文字列の入力　スペース以下の文字で入力終了
	do *s = gc();
	while (*s++ > ' ');
}

void out(int n) { // 非負整数の表示（出力）
	int i; char b[30];

	if (!n) pc('0');
	else {
		i = 0; while (n) b[i++] = n % 10 + '0', n /= 10;
		while (i--) pc(b[i]);
	}
	pc('\n');
}

int N, M;
char a[2005*2005];
char b[2005];

int main()
{
	int r, c, ans;
	char *p;

	N = in(), M = in();
	p = a, r = N; while (r--) ins(p), p += M;
	
	ans = 0, p = a, r = N; while (r--) {
		ins(b);
		c = M; while (c--) if (b[c] != p[c]) ans++;
		p += M;
	}
	out(ans);
	return 0;
}