ĐỀ + ĐÁP ÁN OLYMPIC 16 TIN 10 – CHI TIẾT ĐỀ
Bài 1./ Cho một số N (<=100) và dãy số từ a[1]->a[n] (<=10^9) Hãy in ra một cách nối các số đó lại với nhau sau cho đạt được số lớn nhất
INPUT:
- Dòng đầu là số N
- N dòng tiếp là dãy A
OUTPUT:
Một dòng duy nhất là số lớn nhất nhận được khi nối các số trong dãy A
VD:
INPUT:
5
12
34
567
890
OUTPUT:
8905673412
Bài 2./ Một người muốn đi tham quan một số các thành phố rồi quay lại thành phố xuất phát, sao cho đường đi là ngắn nhất Có N thành phố (<=1000) Thành phố xuất phát S đi qua K thành phố (1<=S,K<=N), K thành phố cho trước, đi tuần tự
INPUT:
- Số N
- Số S và K (cách nhau ít nhất một khoảng trắng)
- K thành phố trên dòng thứ 3 (cách nhau ít nhất một khoảng trắng)
- Cặp các thành phố mang ý nghĩa là có đường đi 2 chiều từ thành phố này qua thành phố kia
OUTPUT:
Một dòng duy nhất in số các thành phố ít nhất phải qua
< Bài này Nguyên quên mất VD rồi, thông cảm>
Bài 3./ Một con robot đi từ tọa độ đầu bên trái cùng đến tọa độ dưới bên phải cùng trong một ma trận NxN (<=50) Ma trận chỉ chứa giá trị 0 và 1 Hãy chỉ ra số nhị phân nhỏ nhất
mà robot tạo ra trên đường đi từ tọa độ [1;1] -> [n;n]
INPUT:
- Số N
- N dòng, N cột tiếp là ma trận
OUTPUT:
Số nhị phân nhỏ nhất tìm được
Trang 2ĐÁP ÁN
Bài 1 Connect
Thuật toán:
- Gọi a là dãy gồm n chuỗi số đã cho
- Sắp xếp theo tiêu chuẩn nếu ai + aj < aj + ai thì hoán vị ai và aj
- Xuất a ta được kết quả
Các giá trị của n: 3 – 10 – 20 – 47 – 58 – 73 – 100
Bài 2 Tour
Thuật toán:
- Goi d1,d2,…,dk là danh sách các đỉnh phải đi qua rồi trở về S
- Gọi NN(a,b) là đường đi ít (ngắn) nhất từ a tới b (duyệt BFS hay Dijkstra)
- Kết quả = NN(S,d1) + NN(d1,d2) + … + NN(dk,S)
Các giá trị: N – K – M – Kết quả
Test 1 8 – 3 – 11 – 7
Test 2 100 – 9 – 100 – 710
Test 3 255 – 7 – 254 – 14
Test 4 500 – 9 – 124750 – 10
Test 5 1000 – 4 – 999 – 3992
Test 6 1000 – 10 – 999 – 1016
Bài 3 Robot
Thuật toán: Quy hoạch động như sau
- Gọi S[i, j] là chuỗi nhị phân nhỏ nhất có được khi đi từ ô (1, 1) đến (i, j)
- S[1, 1] = a[1, 1]
- Điền dòng 1 và cột 1 của S
For i:= 2 to n do
For j:=2 to n do s[i, j]:=min(s[i – 1, j],s[i, j – 1]+a[i, j];
- Kết quả = S[n, n]
Các giá trị của n: 6 – 10 – 15 – 25 – 31 – 40 – 50
Link down test file: http://www.mediafire.com/?zuggj2ni13m