Submission #110512

#TimeUsernameProblemLanguageResultExecution timeMemory
110512AngusRitossaLamps (JOI19_lamps)C++14
100 / 100
226 ms25948 KiB
#include <bits/stdc++.h>
using namespace std;
int memo[1000010][2], done[1000010][2], a[1000010], b[1000010], n, loopcost[1000010][2];

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';
	}
	for (int i = n-1; i >= 0; i--)
	{
		for (int t = 0; t < 2; t++)
		{
			loopcost[i][t] = 1e9;
			int ans = 1e9;
			if (a[i] == (b[i]^t)) 
			{ 
				ans = min(ans, memo[i+1][t]);
			}
			else ans = min(ans, memo[i+1][!t] + !t); 
			int extracost = 1, isok = 1, istoggled = t;
			if (i != n-1 && b[i+1] == b[i])
			{
				loopcost[i][t] = memo[i+1][t]+1;
				loopcost[i][t] = min(loopcost[i][t], loopcost[i+1][t]);
			}
			else if (i != n-1 && b[i+1] != b[i])
			{
				loopcost[i][t] = memo[i+1][t]+1;
				loopcost[i][t] = min(loopcost[i][t], loopcost[i+1][!t]+!t);
			}
			else
			{
				for (int j = i; j < n; j++)
				{
					if ((b[j] == b[i]) != isok)
					{
						isok = !isok;
						istoggled = !istoggled;
						if (istoggled) extracost++;
					}
					int am = memo[j+1][istoggled]+extracost;
					loopcost[i][t] = min(loopcost[i][t], am);
				}
			}
			ans = min(ans, loopcost[i][t]);
		 	memo[i][t] = ans;
		}
	}
	int ans = memo[0][0];
	printf("%d\n", ans);
}

Compilation message (stderr)

lamp.cpp: In function 'int main()':
lamp.cpp:7:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d", &n);
  ~~~~~^~~~~~~~~~
lamp.cpp:11:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf(" %c", &c);
   ~~~~~^~~~~~~~~~~
lamp.cpp:17: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...