HƯỚNG DẪN
Bài 1: ROBOT
Vì robot có thể di chuyển chéo nên ta sẽ cho robot đi nhiều bước chéo nhất có thể
để (x1;y1) gần đến (x2;y2) hơn. Khi x1=x2 thì chỉ cần di chuyển y để y1=y2 hoặc khi y1=y2
thì chỉ cần di chuyển x để x 1=x2 và đó cũng là số bước cịn lại. Từ đó ta thấy số bước ít
nhất mà robot phải đi là max của khoảng cách |x1-x2| và |y1-y2|.
Suy ra kq=max(abs(x1-x2), abs(y1-y2))
Bài 2: CHIA KẸO
Có tất cả 3 bạn.
Các bạn sẽ chọn tất cả các túi kẹo có số kẹo chia hết cho 3 và mỗi bạn ăn 1 cái nên
số kẹo còn lại trong túi được chọn sẽ giảm đi 3 cái.
Giả sử có d túi kẹo có số cái kẹo trong túi chia hết cho 3; S là tổng số kẹo trong
các túi kẹo có số kẹo chia hết cho 3. Khi đó kết quả cần tìm chính là d và (s-3*d)/3
Bài 3: MẬT MÃ
Số nguyên dương chia hết cho 30 (bội của 30) là số vừa chia hết cho 3 và vừa chia
hết cho 10. Suy ra số đó cần có tổng các chữ số chia hết cho 3 và có ít nhất 1 chữ số 0 tận
cùng.
Theo đề ra thì chỉ cần hốn vị các chữ số của số bí ẩn để được số lớn nhất là bội
của 30 nên số bí ẩn phải thỏa mãn điều kiện là một số có các chữ số giảm dần và có ít
nhất 1 chữ số 0.
Do số bí ẩn có thể có đến 10 7 chữ số nên ta phải dùng kiểu xâu để lưu trữ dữ liệu
đầu vào
Gọi t là tổng các chữ số trong số bí ẩn; d[k] là xâu chứa số lượng chữ số k trong số
bí ẩn (0≤k≤9)
Dựa vào t và d[0] để biết số đó có là bội của 30 hay không? Nếu là bội của 30 thì
dựa vào mảng d để in ra số số bí ẩn.
Lưu ý: Để tính giá trị cho các phần tử trong mảng d ta hàm push_back() để thêm
vào cho chương trình thực hiện được nhanh hơn
Bài 4: EQLARRAY
Gọi s là tổng của dãy b
• Sau mỗi lần thao tác thì tổng của dãy sẽ tăng lên k đơn vị. Ban đầu a có tổng là 0 nên
tổng của a ln chia hết cho k. Suy ra nếu b có thể thu được từ a thì s phải chia hết cho k
• Để biến a thành b thì ta phải thao tác đúng s/k lần. Vậy mỗi phần tử trong a chỉ được
tăng lên nhiều nhất s/k đơn vị. Suy ra nếu b có thể thu được từ a thì bmax ≤ s/k
Vậy nếu s ⁝ k và bmax ≤ s/k thì có thể biến a thành b, khơng thì không thể
Bài 5: MARIO
Để số nấm ăn được là tối đa thì ta chỉ được quay đầu nhiều nhất 1 lần
Cho i chạy từ -106 đến 106.
Ta sẽ tìm điểm đầu và điểm cuối của quãng đường khi đi K bước từ X đến i rồi quay đầu lại.
VD i=9, X=5, K=8 thì đi từ 5 đến 9 rồi quay lại đến 3 thì điểm đầu quãng đường là 3,
điểm cuối là 9
Sau đó tính số sức mạnh trên qng đường đó bằng mảng cộng dồn.
Đáp án sẽ là max của các kết quả tính được
Xử lí toạ độ âm bằng cách
• Cộng thêm 106 vào toạ độ và chú ý trường hợp điểm đầu bằng 0 lúc dùng cộng dồn
hoặc • Cộng thêm 106+1 vào toạ độ
MỘT SỐ BỘ TEST NHỎ
(BỘ TEST LỚN CÁC BẠN TẢI TRONG FILE ĐÍNH KÈM NHÉ)
Bài 1: ROBOT
ROBOT.INP
2 -1
ROBOT.OUT
11
2 10
10 5
12
-2 5
-5 -5
0
-5 -5
100 123
1111
980 -988
-980 -1234
99968
9876 98734
Bài 2: CHIA KẸO
CANDIES.INP
CANDIES.OUT
11
0
4 0 1 16 0 10 16 7 16 2 7
0
21
4
0 5 16 7 8 14 8 4 10 3 6 4 12 8 12 8 0 17 19 1 11
7
100
35
87 96 64 87 83 84 33 87 87 98 7 45 4 0 19 41 54 62 625
19 6 77 70 80 76 78 89 92 79 64 37 15 3 95 52 59 34
8 79 97 92 67 62 25 89 46 7 45 84 99 45 26 82 3 3
12 72 76 1 64 17 4 42 78 35 74 99 35 41 86 95 99 50
24 63 95 0 74 64 59 46 11 27 2 42 82 52 6 41 94 46
10 78 41 90 69 94 8 42 37 96
Bài 3: MATMA
MATMA.INP
MATMA.OUT
1230
3210
123
-1
12340
43210
503134467917820
987765443321100
341562039466741068
987666654443321100
Bài 4: EQLARRAY
EQLARRAY.INP
EQLARRAY.OUT
Dữ liệu lớn nên mình khơng
copy vào đây được
Bài 5: MARIO
MARIO.INP
10 4 10
MARIO.OUT
76
-13 6
6 24
-11 13
51
-9 21
10 28
3 23
-16 20
-8 17
0 13
20 -3 1
8
15 25
-12 1
-10 7
10 8
-2 8
13 20
-7 14
2 21
1 16
7 20
-14 18
12 20
4 16
51
-1 9
8 23
-17 10
07
6 23
19 13
100 -1000 2
-285 7152
2 19328
-351 8467
-794 32756
130 11854
-4 10236
-618 2046
0
244 3359
-215 5915
-22 7576
185 1496
696 18516
-647 24044
-25 5963
308 12269
25 1211
602 29084
-268 27647
385 22906
291 25350
-588 23282
572 16818
-361 22199
-445 21156
-54 3216
63 22476
-737 2629
-731 7298
-29 2426
121 8032
-114 18595
-891 15522
-546 24520
265 16841
-289 14253
499 27677
-49 18164
-853 1839
665 10934
262 14519
110 26070
-809 13350
-137 792
-374 11790
285 6092
-264 11540
-627 9364
470 6507
18 14885
-304 27912
-219 9749
330 30223
-100 20506
-484 2600
471 27204
-895 9407
554 14096
9 858
-745 32365
816 14989
125 26380
669 17201
723 23441
-163 29416
-74 31606
-72 1049
302 26059
882 4326
-208 18
137 454
813 17895
38 15312
-458 15931
-158 9177
-354 31040
-323 8942
-44 1633
-324 3540
-3 4206
304 22317
115 13964
242 14417
43 11964
597 32208
186 2155
-212 4765
91 8310
368 1354
362 1462
258 12860
340 19328
558 8355
559 32305
-104 13222
-404 21038
353 15993
-513 8157
-55 9561
-239 24442
534 20136