# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
261246 |
2020-08-11T15:19:50 Z |
mjkocijan |
Lamps (JOI19_lamps) |
C++14 |
|
51 ms |
43128 KB |
#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
#define pb push_back
typedef long long ll;
typedef pair<ll, ll> ii;
#define MAXN 1001001
int n, reza = 0, reza2 = 0;
char a[MAXN], b[MAXN];
int fl[MAXN], t0[MAXN], t1[MAXN], fif[MAXN], fib[MAXN], cf[MAXN], c0[MAXN], c1[MAXN], cfr[MAXN];
int alt_reza = 0;
int gotu[MAXN];
int main()
{
memset(gotu, -1, sizeof gotu);
scanf("%d", &n);
scanf("%s", a);
scanf("%s", b);
for (int i = 0; i < n; i++) {
fl[i] = a[i] != b[i];
t0[i] = b[i] == '0';
t1[i] = b[i] == '1';
}
for (int i = 0; i < n; i++) {
if (i == 0) {
fif[i] = 0;
fib[i] = 0;
} else {
if (fl[i]) fif[i] = fl[i - 1] ? fif[i - 1] : i;
fib[i] = t0[i - 1] == t0[i] ? fib[i - 1] : i;
cf[i] = cf[i - 1];
c0[i] = c0[i - 1];
c1[i] = c1[i - 1];
}
if ((i == n - 1 && fl[i]) || (i < n - 1 && fl[i] && !fl[i + 1])) {
cf[i]++;
}
if (i == n - 1 || (i < n - 1 && t0[i] && !t0[i + 1])) {
c0[i]++;
alt_reza++;
}
if (i == n - 1 || (i < n - 1 && t1[i] && !t1[i + 1])) {
c1[i]++;
if (i < n - 1) alt_reza++;
}
//cout << i<<": "<<fl[i]<<' '<<t0[i]<<' '<<t1[i]<<' '<<fif[i]<<' '<<fib[i]<<' '<<cf[i]<<' '<<c0[i]<<' '<<c1[i]<<endl;
}
for (int i = n - 1; i >= 0; i--) {
if (i < n - 1) {
cfr[i] = cfr[i + 1];
}
if (!i || (i && fl[i] && !fl[i - 1])) {
cfr[i]++;
}
}
/*for (int i = 0; i < n; i++) {
if (i < n - 1 && fl[i] == fl[i + 1]) continue;
if (!fl[i]) continue;
reza++;//cout<<i<<' ';
}//cout<<endl;
int i2 = 0, i3 = 0;
for (; i2 < n; i2++) {
if (t0[i2]) break;
}
for (; i3 < n; i3++) {
if (t1[i3]) break;
}
if (max(i2 - 1, i3 - 1) >= 0) reza -= max(0, cf[max(i2 - 1, i3 - 1)] - 1);//printf("%d\n", reza);
i2 = n - 1; i3 = n - 1;
for (; i2 >= 0; i2--) {
if (t0[i2]) break;
}
for (; i3 >= 0; i3--) {
if (t1[i3]) break;
}
if (min(i2 + 1, i3 + 1) < n && i2 >= 0 && i3 >= 0) reza -= max(0, cfr[min(i2 + 1, i3 + 1)] - 1);//printf("%d\n", reza);
for (int i = 0; i < n; i++) {
if (!t1[i] || (i < n - 1 && t1[i + 1])) continue;
if (i == n - 1 || fib[i] == 0) continue;
int ccc = fl[fib[i]];
if (fl[fib[i] - 1] && fl[i + 1]) reza -= max(0, cf[i] - cf[fib[i] - 1] - ccc);//cout<<i<<'.'<<reza<<' '<<fib[i]<<' '<<fl[fib[i]-1]<<' '<<cf[i]<<' '<<cf[fib[i]-1]<<' '<<ccc<<endl;
if (!fl[fib[i] - 1] && fl[i + 1]) reza -= max(0, cf[i] - cf[fib[i] - 1] - 1);//cout<<i<<'.'<<reza<<endl;
if (fl[fib[i] - 1] && !fl[i + 1]) reza -= max(0, cf[i] - cf[fib[i] - 1] - ccc - 1);//cout<<i<<'.'<<reza<<endl;
if (!fl[fib[i] - 1] && !fl[i + 1]) reza -= max(0, cf[i] - cf[fib[i] - 1] - 1);//cout<<i<<'.'<<reza<<endl;
}printf("%d\n", reza);
for (int i = 0; i < n; i++) {
if (!t0[i] || (i < n - 1 && t0[i + 1])) continue;
if (i == n - 1 || fib[i] == 0) continue;
int ccc = fl[fib[i]];
if (fl[fib[i] - 1] && fl[i + 1]) reza -= max(0, cf[i] - cf[fib[i] - 1] - ccc);
if (!fl[fib[i] - 1] && fl[i + 1]) reza -= max(0, cf[i] - cf[fib[i] - 1] - 1);
if (fl[fib[i] - 1] && !fl[i + 1]) reza -= max(0, cf[i] - cf[fib[i] - 1] - ccc - 1);
if (!fl[fib[i] - 1] && !fl[i + 1]) reza -= max(0, cf[i] - cf[fib[i] - 1] - 1);
}*/
for (int i = 0; i < n; i++) {
if (i < n - 1 && t0[i] == t0[i + 1]) continue;
if (cf[i] != cf[fib[i]] && cfr[i] != cfr[fib[i]]) {
gotu[fib[i]] = i;//cout<<i<<' '<<fib[i]<<" . "<<cf[i]<<' '<<cf[fib[i]]<<endl;
reza2++;
//for (int j = fib[i]; j <= i; j++) {
//
//}
}
}
for (int i = 0; i < n; i++) {
if (gotu[i] > -1) {
i = gotu[i];
continue;
}
if (i < n - 1 && fl[i] == fl[i + 1]) continue;
if (!fl[i]) continue;
if (i < n - 1 && gotu[i + 1] > -1) continue;
reza++;
//cout<<i<<' ';
}
//reza = min(reza, alt_reza);
printf("%d\n", reza + reza2);
return 0;
}
Compilation message
lamp.cpp: In function 'int main()':
lamp.cpp:19:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &n);
~~~~~^~~~~~~~~~
lamp.cpp:20:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%s", a);
~~~~~^~~~~~~~~
lamp.cpp:21:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%s", b);
~~~~~^~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
4352 KB |
Output is correct |
2 |
Correct |
3 ms |
4352 KB |
Output is correct |
3 |
Correct |
4 ms |
4352 KB |
Output is correct |
4 |
Correct |
4 ms |
4352 KB |
Output is correct |
5 |
Correct |
3 ms |
4352 KB |
Output is correct |
6 |
Correct |
4 ms |
4352 KB |
Output is correct |
7 |
Correct |
4 ms |
4352 KB |
Output is correct |
8 |
Correct |
4 ms |
4352 KB |
Output is correct |
9 |
Correct |
4 ms |
4352 KB |
Output is correct |
10 |
Correct |
4 ms |
4352 KB |
Output is correct |
11 |
Correct |
4 ms |
4352 KB |
Output is correct |
12 |
Correct |
4 ms |
4352 KB |
Output is correct |
13 |
Correct |
4 ms |
4352 KB |
Output is correct |
14 |
Correct |
4 ms |
4352 KB |
Output is correct |
15 |
Correct |
4 ms |
4352 KB |
Output is correct |
16 |
Incorrect |
3 ms |
4352 KB |
Output isn't correct |
17 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
4352 KB |
Output is correct |
2 |
Correct |
3 ms |
4352 KB |
Output is correct |
3 |
Correct |
4 ms |
4352 KB |
Output is correct |
4 |
Correct |
4 ms |
4352 KB |
Output is correct |
5 |
Correct |
3 ms |
4352 KB |
Output is correct |
6 |
Correct |
4 ms |
4352 KB |
Output is correct |
7 |
Correct |
4 ms |
4352 KB |
Output is correct |
8 |
Correct |
4 ms |
4352 KB |
Output is correct |
9 |
Correct |
4 ms |
4352 KB |
Output is correct |
10 |
Correct |
4 ms |
4352 KB |
Output is correct |
11 |
Correct |
4 ms |
4352 KB |
Output is correct |
12 |
Correct |
4 ms |
4352 KB |
Output is correct |
13 |
Correct |
4 ms |
4352 KB |
Output is correct |
14 |
Correct |
4 ms |
4352 KB |
Output is correct |
15 |
Correct |
4 ms |
4352 KB |
Output is correct |
16 |
Incorrect |
3 ms |
4352 KB |
Output isn't correct |
17 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
4352 KB |
Output is correct |
2 |
Correct |
3 ms |
4352 KB |
Output is correct |
3 |
Correct |
3 ms |
4352 KB |
Output is correct |
4 |
Correct |
4 ms |
4352 KB |
Output is correct |
5 |
Correct |
3 ms |
4352 KB |
Output is correct |
6 |
Correct |
3 ms |
4372 KB |
Output is correct |
7 |
Correct |
45 ms |
39160 KB |
Output is correct |
8 |
Correct |
51 ms |
43128 KB |
Output is correct |
9 |
Correct |
50 ms |
43128 KB |
Output is correct |
10 |
Correct |
49 ms |
43060 KB |
Output is correct |
11 |
Correct |
50 ms |
43032 KB |
Output is correct |
12 |
Correct |
45 ms |
43084 KB |
Output is correct |
13 |
Correct |
43 ms |
41764 KB |
Output is correct |
14 |
Correct |
46 ms |
43128 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
4352 KB |
Output is correct |
2 |
Correct |
3 ms |
4352 KB |
Output is correct |
3 |
Correct |
4 ms |
4352 KB |
Output is correct |
4 |
Correct |
4 ms |
4352 KB |
Output is correct |
5 |
Correct |
3 ms |
4352 KB |
Output is correct |
6 |
Correct |
4 ms |
4352 KB |
Output is correct |
7 |
Correct |
4 ms |
4352 KB |
Output is correct |
8 |
Correct |
4 ms |
4352 KB |
Output is correct |
9 |
Correct |
4 ms |
4352 KB |
Output is correct |
10 |
Correct |
4 ms |
4352 KB |
Output is correct |
11 |
Correct |
4 ms |
4352 KB |
Output is correct |
12 |
Correct |
4 ms |
4352 KB |
Output is correct |
13 |
Correct |
4 ms |
4352 KB |
Output is correct |
14 |
Correct |
4 ms |
4352 KB |
Output is correct |
15 |
Correct |
4 ms |
4352 KB |
Output is correct |
16 |
Incorrect |
3 ms |
4352 KB |
Output isn't correct |
17 |
Halted |
0 ms |
0 KB |
- |