Logo Wy Online Judge

WyOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#479#106. 「NOIP2024」编辑字符串ryp90209ms4008kbC++141.6kb2025-04-25 10:09:442025-04-25 10:09:44

answer

#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
char s[N], t[N], z[N], w[N];

// 我操。T1 也过大样例了。
// 我一定不会输的。我一定不会输的。 

int main (void)
{
	int tc;
	
	cin.tie (0)->sync_with_stdio (false);
	cin >> tc;
	while (tc--) {
		int n;
		
		cin >> n >> (s + 1) >> (t + 1);
		cin >> (z + 1) >> (w + 1);
		
		// 再,认真考虑一下。 
		// 前面都可以交换的部分,直接贪心。
		// 每遇到一个 0,我们就停下来,算一算这段区间内,任意交换的贡献。
		int i = 1, j = 1;
		int s0 = 0, s1 = 0, t0 = 0, t1 = 0, res = 0;
		auto count = [&](int &x, int &y, char c) -> void
		{ if (c == '0') x++; else y++; };
		int la = 0, lb = 0;
		
		while (i <= n || j <= n) {
			while (i <= n && z[i] == '1') count (s0, s1, s[i++]);
			while (j <= n && w[j] == '1') count (t0, t1, t[j++]);
			
			int l = min (i, j) - max (la, lb);
			if (l < 0) l = 0;
			int u = min ({ l, s0, t0 });
			res += u, s0 -= u, t0 -= u;
			u = min ({ l - u, s1, t1 }), res += u, s1 -= u, t1 -= u;
			if (i == j) {
				if (i < n && s[i] == t[j]) res++;
				s0 = s1 = t0 = t1 = 0;
				i++, j++; 
				continue;
			}
			if (i < j) {
				// s 在 t 的前面,s 要往后走了!
				if (s[i] == '0' && t0) t0--, res++;
				if (s[i] == '1' && t1) t1--, res++;
				s0 = s1 = 0, la = ++i;
			}
			else {
				if (t[j] == '0' && s0) s0--, res++;
				if (t[j] == '1' && s1) s1--, res++;
				t0 = t1 = 0, lb = ++j;
			}
		} 
		cout << res << '\n';
		for (int i = 0; i <= n + 10; i++) s[i] = t[i] = z[i] = w[i] = 0;
	}
	return 0;
}

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 5
Accepted
time: 1ms
memory: 3180kb

input:

10
9
111101010
101011100
101111111
111111011
9
001110100
111010101
111111111
011011111
8
01000100
00...

output:

8
7
6
9
4
5
4
4
4
7

result:

ok 10 tokens

Test #2:

score: 5
Accepted
time: 3ms
memory: 3636kb

input:

10
10
0110100110
0100000010
1011011011
0101110111
7
0100110
0001100
0011111
1111111
8
00000000
11111...

output:

7
6
0
4
4
2
7
7
8
6

result:

ok 10 tokens

Test #3:

score: 5
Accepted
time: 3ms
memory: 3244kb

input:

10
10
1001000001
0100000011
1000101101
0011111100
9
111111100
000000000
111001010
100011011
9
111111...

output:

6
2
5
0
10
2
7
4
8
3

result:

ok 10 tokens

Test #4:

score: 5
Accepted
time: 1ms
memory: 3612kb

input:

10
10
1011011111
0000000000
1111100010
0001011111
9
000000000
000100100
111111111
000111110
7
111011...

output:

2
7
3
4
8
2
3
5
4
7

result:

ok 10 tokens

Test #5:

score: 5
Accepted
time: 3ms
memory: 3448kb

input:

10
999
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...

output:

405
765
180
993
368
465
562
104
471
287

result:

ok 10 tokens

Test #6:

score: 5
Accepted
time: 2ms
memory: 3572kb

input:

10
998
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...

output:

514
504
541
518
598
337
108
445
320
533

result:

ok 10 tokens

Test #7:

score: 0
Wrong Answer
time: 17ms
memory: 4008kb

input:

10
100000
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...

output:

975
48187
43831
36011
48402
12101
68446
26937
14167
37132

result:

wrong answer 2nd words differ - expected: '48188', found: '48187'

Test #8:

score: 5
Accepted
time: 2ms
memory: 3740kb

input:

10
99999
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...

output:

32254
46821
36505
43488
59340
47604
54524
53897
53675
25677

result:

ok 10 tokens

Test #9:

score: 0
Wrong Answer
time: 4ms
memory: 3272kb

input:

10
1000
00000001001000000000001011000011100000010100011001101000100000000000000000000000000000000011...

output:

463
511
423
412
534
553
828
587
512
520

result:

wrong answer 5th words differ - expected: '535', found: '534'

Test #10:

score: 5
Accepted
time: 3ms
memory: 3372kb

input:

10
997
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...

output:

534
569
588
635
623
582
479
510
656
402

result:

ok 10 tokens

Test #11:

score: 5
Accepted
time: 26ms
memory: 3668kb

input:

10
100000
111011111110110111111111010001011110111001101111010101010101111011111110011111011111111101...

output:

59099
60314
62231
58265
75929
36728
58446
62981
59041
19224

result:

ok 10 tokens

Test #12:

score: 5
Accepted
time: 26ms
memory: 3624kb

input:

10
99999
0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110...

output:

50503
60559
64431
51759
55159
78816
88085
57698
65174
91077

result:

ok 10 tokens

Test #13:

score: 5
Accepted
time: 2ms
memory: 3452kb

input:

10
997
100000001000000010100000110000010010100011000100000000010001000100011010010001001100001000000...

output:

477
829
592
573
614
132
931
610
980
237

result:

ok 10 tokens

Test #14:

score: 5
Accepted
time: 3ms
memory: 3448kb

input:

10
999
000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000100...

output:

503
242
975
885
750
528
896
389
387
258

result:

ok 10 tokens

Test #15:

score: 5
Accepted
time: 16ms
memory: 3740kb

input:

10
100000
101111010011110111110101110111111001001011011001111111011111011111001111001111010110111011...

output:

47943
42512
86300
81321
81110
69327
48115
24200
30695
54529

result:

ok 10 tokens

Test #16:

score: 5
Accepted
time: 23ms
memory: 3748kb

input:

10
99998
1111111111111111111111111111111111111111101111111111111111111111111111111111111111111111111...

output:

87231
36605
52504
24563
45410
86215
72694
26325
39997
59428

result:

ok 10 tokens

Test #17:

score: 5
Accepted
time: 0ms
memory: 3228kb

input:

10
999
000100010000110000010000100101010000010001100001100101001010001000110111100100000011000111001...

output:

776
646
705
452
759
130
699
560
427
614

result:

ok 10 tokens

Test #18:

score: 5
Accepted
time: 4ms
memory: 3636kb

input:

10
998
101000000000000000001000000010000000000000000000000010000001010101000000000010000000000100100...

output:

472
616
691
649
567
307
170
748
727
701

result:

ok 10 tokens

Test #19:

score: 5
Accepted
time: 32ms
memory: 3812kb

input:

10
99999
0000000100000000001000100000001000000000000000000000000001000000000000000000011000000000000...

output:

70833
64573
51649
93023
74958
62637
67006
80120
76759
63472

result:

ok 10 tokens

Test #20:

score: 5
Accepted
time: 38ms
memory: 3996kb

input:

10
99999
0000001101101101001111001111000111111000111101111111111011110010111111011101010111101010101...

output:

59680
67434
35099
69290
59184
81406
64316
50750
65959
42615

result:

ok 10 tokens