QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#176748#6320. Parallel Processing (Hard)ucup-team1209AC ✓3ms7588kbC++202.9kb2023-09-11 23:07:372023-09-11 23:07:38

Judging History

你现在查看的是最新测评结果

  • [2023-09-11 23:07:38]
  • 评测
  • 测评结果:AC
  • 用时:3ms
  • 内存:7588kb
  • [2023-09-11 23:07:37]
  • 提交

answer

#include<bits/stdc++.h>
using std::cin;
using std::cout;
const int N = 100005;
using vec = std::vector<int>;
using vpi = std::vector<std::pair<int, int>>;
std::map<vec, int> map;
std::map<vec, vpi> deletes;
std::map<vec, vec> nxt;

int n;
int dfs(vec x) {
	if(x.empty()) return 0;
	if(map.count(x)) return map[x];

	int ans = 1e9;
	vpi del; vec nx;
	for(int i = 1;i < (1 << x.size());++i) {
		if(i & i >> 1) continue;
		int sum = 0;
		vec z;
		for(int j = 0;j < (int) x.size();++j) if(i >> j & 1) {
			sum += (j == (int) x.size() - 1 ? n : x[j + 1]) - x[j];
		} else {
			z.push_back(x[j]);
		}
		int co = (sum + 3) / 4 + dfs(z);
		if(co < ans) {
			ans = co;
			del.clear();
			for(int j = 0;j < (int) x.size();++j) if(i >> j & 1) {
				int nxt = j == (int) x.size() - 1 ? n : x[j + 1];
				for(int k = x[j];k < nxt;++k) del.emplace_back(x[j], k + 1);
			}
			nx = z;
		}
	}
	deletes[x] = del;
	nxt[x] = nx;
	return map[x] = ans;
}
std::string s[N];

int main() {
	cin >> n;
	vec v;
	for(int i = 1;i < n;++i) {
		v.push_back(i);
	}
	for(int i = 1;i <= n;++i) {
		if(i < 10) s[i] = '0' + i;
		else s[i] = 'a' + i - 10;
	}
	if(n > 16) {
		std::vector<std::pair<int, int>> d;
		int m = n / 5 + 1;
		int pb = n % 5 == 3 || n % 5 == 4;

		int P[] = { 0, m, m * 2, m * 3 + pb, m * 4 + pb * 2 };
		int L[] = { m, m, m + pb, m + pb };

		for(int i = 2;i <= m;++i) {
			for(int j = 0;j < 4;++j) {
				d.emplace_back(i - 1 + P[j], i + P[j]);
			}
		}
		std::vector<std::pair<int, int>> free;
		for(int i = 1;i < 4;++i) {
			int pos = L[i] - 3;
			if(pb && i == 1) {
				pos = L[i] - 1;
			}
			for(int j = pos;j <= L[i];++j) {
				d.emplace_back(P[i], P[i] + j);
			}
			if(pb && i == 1) {
				d.emplace_back(m + P[2], m + 1 + P[2]);
				d.emplace_back(m + P[3], m + 1 + P[3]);
			}
			for(int j = 1;j < pos;++j) {
				free.emplace_back(P[i], P[i] + j);
			}
		}
		for(int k = P[4] + 1;k <= n;++k) {
			d.emplace_back(k - 1, k);
			for(int x = 0;x < 3;++x) {
				if(free.size()) {
					d.push_back(free.back());
					free.pop_back();
				} else {
					auto x = d.back();
					d.push_back(x);
				}
			}
		}
		for(;free.size();) {
			for(int x = 0;x < 4;++x) {
				if(free.size()) {
					d.push_back(free.back());
					free.pop_back();
				} else {
					auto x = d.back();
					d.push_back(x);
				}
			}
		}
		cout << d.size() / 4 << '\n';
		for(auto [u, v] : d) {
			cout << v << ' ' << u << ' ' << v << '\n';
			s[v] = s[u] + s[v];
		}
		// for(int i = 1;i <= n;++i) cout << s[i] << '\n';
		return 0;
	}
	dfs(v);
	cout << dfs(v) << '\n';
	return 0;
	for(;v.size();) {
		auto d = deletes[v];
		for(;d.size() % 4;) d.emplace_back(2e3, 2e3);

		for(auto [u, v] : d) {
			cout << v << ' ' << u << ' ' << v << '\n';
			s[v] = s[u] + s[v];
		}
		v = nxt[v];
	}
//	for(int i = 1;i <= n;++i) cout << s[i] << '\n';
}



Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 6612kb

input:

17

output:

7
2 1 2
6 5 6
10 9 10
14 13 14
3 2 3
7 6 7
11 10 11
15 14 15
4 3 4
8 7 8
12 11 12
16 15 16
5 4 5
6 4 6
7 4 7
8 4 8
9 8 9
10 8 10
11 8 11
12 8 12
13 12 13
14 12 14
15 12 15
16 12 16
17 16 17
17 16 17
17 16 17
17 16 17

result:

ok AC

Test #2:

score: 0
Accepted
time: 0ms
memory: 6612kb

input:

18

output:

7
2 1 2
6 5 6
10 9 10
15 14 15
3 2 3
7 6 7
11 10 11
16 15 16
4 3 4
8 7 8
12 11 12
17 16 17
7 4 7
8 4 8
13 12 13
18 17 18
10 8 10
11 8 11
12 8 12
13 8 13
15 13 15
16 13 16
17 13 17
18 13 18
14 13 14
9 8 9
6 4 6
5 4 5

result:

ok AC

Test #3:

score: 0
Accepted
time: 0ms
memory: 6576kb

input:

19

output:

8
2 1 2
6 5 6
10 9 10
15 14 15
3 2 3
7 6 7
11 10 11
16 15 16
4 3 4
8 7 8
12 11 12
17 16 17
7 4 7
8 4 8
13 12 13
18 17 18
10 8 10
11 8 11
12 8 12
13 8 13
15 13 15
16 13 16
17 13 17
18 13 18
19 18 19
14 13 14
9 8 9
6 4 6
5 4 5
5 4 5
5 4 5
5 4 5

result:

ok AC

Test #4:

score: 0
Accepted
time: 0ms
memory: 6644kb

input:

20

output:

8
2 1 2
7 6 7
12 11 12
17 16 17
3 2 3
8 7 8
13 12 13
18 17 18
4 3 4
9 8 9
14 13 14
19 18 19
5 4 5
10 9 10
15 14 15
20 19 20
7 5 7
8 5 8
9 5 9
10 5 10
12 10 12
13 10 13
14 10 14
15 10 15
17 15 17
18 15 18
19 15 19
20 15 20
16 15 16
11 10 11
6 5 6
6 5 6

result:

ok AC

Test #5:

score: 0
Accepted
time: 0ms
memory: 6604kb

input:

21

output:

8
2 1 2
7 6 7
12 11 12
17 16 17
3 2 3
8 7 8
13 12 13
18 17 18
4 3 4
9 8 9
14 13 14
19 18 19
5 4 5
10 9 10
15 14 15
20 19 20
7 5 7
8 5 8
9 5 9
10 5 10
12 10 12
13 10 13
14 10 14
15 10 15
17 15 17
18 15 18
19 15 19
20 15 20
21 20 21
16 15 16
11 10 11
6 5 6

result:

ok AC

Test #6:

score: 0
Accepted
time: 1ms
memory: 6640kb

input:

120

output:

48
2 1 2
27 26 27
52 51 52
77 76 77
3 2 3
28 27 28
53 52 53
78 77 78
4 3 4
29 28 29
54 53 54
79 78 79
5 4 5
30 29 30
55 54 55
80 79 80
6 5 6
31 30 31
56 55 56
81 80 81
7 6 7
32 31 32
57 56 57
82 81 82
8 7 8
33 32 33
58 57 58
83 82 83
9 8 9
34 33 34
59 58 59
84 83 84
10 9 10
35 34 35
60 59 60
85 84 8...

result:

ok AC

Test #7:

score: 0
Accepted
time: 0ms
memory: 6820kb

input:

421

output:

168
2 1 2
87 86 87
172 171 172
257 256 257
3 2 3
88 87 88
173 172 173
258 257 258
4 3 4
89 88 89
174 173 174
259 258 259
5 4 5
90 89 90
175 174 175
260 259 260
6 5 6
91 90 91
176 175 176
261 260 261
7 6 7
92 91 92
177 176 177
262 261 262
8 7 8
93 92 93
178 177 178
263 262 263
9 8 9
94 93 94
179 178 ...

result:

ok AC

Test #8:

score: 0
Accepted
time: 2ms
memory: 6884kb

input:

464

output:

186
2 1 2
95 94 95
188 187 188
282 281 282
3 2 3
96 95 96
189 188 189
283 282 283
4 3 4
97 96 97
190 189 190
284 283 284
5 4 5
98 97 98
191 190 191
285 284 285
6 5 6
99 98 99
192 191 192
286 285 286
7 6 7
100 99 100
193 192 193
287 286 287
8 7 8
101 100 101
194 193 194
288 287 288
9 8 9
102 101 102
...

result:

ok AC

Test #9:

score: 0
Accepted
time: 2ms
memory: 7320kb

input:

812

output:

325
2 1 2
165 164 165
328 327 328
491 490 491
3 2 3
166 165 166
329 328 329
492 491 492
4 3 4
167 166 167
330 329 330
493 492 493
5 4 5
168 167 168
331 330 331
494 493 494
6 5 6
169 168 169
332 331 332
495 494 495
7 6 7
170 169 170
333 332 333
496 495 496
8 7 8
171 170 171
334 333 334
497 496 497
9 ...

result:

ok AC

Test #10:

score: 0
Accepted
time: 3ms
memory: 7360kb

input:

862

output:

345
2 1 2
175 174 175
348 347 348
521 520 521
3 2 3
176 175 176
349 348 349
522 521 522
4 3 4
177 176 177
350 349 350
523 522 523
5 4 5
178 177 178
351 350 351
524 523 524
6 5 6
179 178 179
352 351 352
525 524 525
7 6 7
180 179 180
353 352 353
526 525 526
8 7 8
181 180 181
354 353 354
527 526 527
9 ...

result:

ok AC

Test #11:

score: 0
Accepted
time: 3ms
memory: 7552kb

input:

996

output:

398
2 1 2
202 201 202
402 401 402
602 601 602
3 2 3
203 202 203
403 402 403
603 602 603
4 3 4
204 203 204
404 403 404
604 603 604
5 4 5
205 204 205
405 404 405
605 604 605
6 5 6
206 205 206
406 405 406
606 605 606
7 6 7
207 206 207
407 406 407
607 606 607
8 7 8
208 207 208
408 407 408
608 607 608
9 ...

result:

ok AC

Test #12:

score: 0
Accepted
time: 0ms
memory: 7556kb

input:

997

output:

399
2 1 2
202 201 202
402 401 402
602 601 602
3 2 3
203 202 203
403 402 403
603 602 603
4 3 4
204 203 204
404 403 404
604 603 604
5 4 5
205 204 205
405 404 405
605 604 605
6 5 6
206 205 206
406 405 406
606 605 606
7 6 7
207 206 207
407 406 407
607 606 607
8 7 8
208 207 208
408 407 408
608 607 608
9 ...

result:

ok AC

Test #13:

score: 0
Accepted
time: 2ms
memory: 7528kb

input:

998

output:

399
2 1 2
202 201 202
402 401 402
603 602 603
3 2 3
203 202 203
403 402 403
604 603 604
4 3 4
204 203 204
404 403 404
605 604 605
5 4 5
205 204 205
405 404 405
606 605 606
6 5 6
206 205 206
406 405 406
607 606 607
7 6 7
207 206 207
407 406 407
608 607 608
8 7 8
208 207 208
408 407 408
609 608 609
9 ...

result:

ok AC

Test #14:

score: 0
Accepted
time: 0ms
memory: 7568kb

input:

999

output:

400
2 1 2
202 201 202
402 401 402
603 602 603
3 2 3
203 202 203
403 402 403
604 603 604
4 3 4
204 203 204
404 403 404
605 604 605
5 4 5
205 204 205
405 404 405
606 605 606
6 5 6
206 205 206
406 405 406
607 606 607
7 6 7
207 206 207
407 406 407
608 607 608
8 7 8
208 207 208
408 407 408
609 608 609
9 ...

result:

ok AC

Test #15:

score: 0
Accepted
time: 2ms
memory: 7588kb

input:

1000

output:

400
2 1 2
203 202 203
404 403 404
605 604 605
3 2 3
204 203 204
405 404 405
606 605 606
4 3 4
205 204 205
406 405 406
607 606 607
5 4 5
206 205 206
407 406 407
608 607 608
6 5 6
207 206 207
408 407 408
609 608 609
7 6 7
208 207 208
409 408 409
610 609 610
8 7 8
209 208 209
410 409 410
611 610 611
9 ...

result:

ok AC