Submission #110502

#TimeUsernameProblemLanguageResultExecution timeMemory
110502AngusRitossaLamps (JOI19_lamps)C++14
47 / 100
1064 ms104148 KiB
#include <bits/stdc++.h>
using namespace std;
int memo[1000010][2], done[1000010][2], a[1000010], b[1000010], n;
int dp(int i, int t)
{
	if (i == n) return 0;
	if (done[i][t]) return memo[i][t];
	done[i][t] = 1;
	if (a[i] == (b[i]^t)) return memo[i][t] = dp(i+1, t);
	int ans = dp(i+1, !t) + !t; // Remove/add a toggle, therefore curr is correct
	int extracost = 1, isok = 1, istoggled = t;
	for (int j = i; j < n; j++)
	{
		if ((b[j] == b[i]) != isok)
		{
			isok = !isok;
			istoggled = !istoggled;
			if (istoggled) extracost++;
		}
		int am = dp(j+1, istoggled)+extracost;
		ans = min(ans, am);
	}
	return memo[i][t] = ans;
}
int main()
{
	scanf("%d", &n);
	for (int i = 0; i < n; i++) 
	{
		char c;
		scanf(" %c", &c);
		a[i] = c-'0';
	}
	for (int i = 0; i < n; i++) 
	{
		char c;
		scanf(" %c", &c);
		b[i] = c-'0';
	}
	int ans = dp(0, 0);
	printf("%d\n", ans);
}

Compilation message (stderr)

lamp.cpp: In function 'int main()':
lamp.cpp:27:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d", &n);
  ~~~~~^~~~~~~~~~
lamp.cpp:31:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf(" %c", &c);
   ~~~~~^~~~~~~~~~~
lamp.cpp:37:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf(" %c", &c);
   ~~~~~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...