Submission #204060

#TimeUsernameProblemLanguageResultExecution timeMemory
204060ics0503Lamps (JOI19_lamps)C++17
10 / 100
200 ms67064 KiB
#include<stdio.h>

char a[1212121], b[1212121];
int D[1212121][4][4];
int min(int a, int b) { if (a < b)return a; return b; }
bool oper(int type, int type2, int w) {
	if (type == 0)return b[w] == '0';
	if (type == 1)return b[w] == '1';
	if (type == 2 && type2 == 3)return b[w] != a[w];
	if (type == 2 && type2 == 2)return b[w] == a[w];
	if (type == 2 && type2 == 1)return b[w] == '0';
	if (type == 2 && type2 == 0)return b[w] == '0';
	if (type == 3 && type2 == 3)return a[w] == b[w];
	return oper(type2, 3, w);
}
int main() {
	int n, i, j, k, p; scanf("%d%s%s", &n,a+1,b+1);
	for (i = 0; i < 4; i++)for (j = 0; j < 4; j++)D[0][i][j] = 1e9;
	D[0][3][3] = 0;
	for (i = 1; i <= n; i++) {
		for (j = 0; j < 4; j++) {
			for (k = 0; k < 4; k++) {
				D[i][j][k] = 1e9;
				if (oper(j, k, i)) {
					D[i][j][k] = D[i - 1][j][k];
					for (p = 0; p < 4; p++)
						D[i][j][k] = min(D[i][j][k], D[i - 1][p][k] + (j != 3));
					if (k == 3) {
						for (p = 0; p < 4; p++)
							D[i][j][3] = min(D[i][j][3], D[i - 1][p][j] + (p == 3));
					}
					for (p = 0; p < 4; p++)
						D[i][j][k] = min(D[i][j][k], D[i - 1][k][p] + (j != 3));
				}
			}
		}
	}
	int ans = 1e9;
	for (i = 0; i < 4; i++)for (j = 0; j < 4; j++)ans = min(ans, D[n][i][j]);
	printf("%d", ans);

	return 0;
}

Compilation message (stderr)

lamp.cpp: In function 'int main()':
lamp.cpp:17:26: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  int n, i, j, k, p; scanf("%d%s%s", &n,a+1,b+1);
                     ~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...