| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | JOI 2007 - Anagram | 100 (p) | 5.0s | 256M |
| 2 | JOI 2007 - Route | 100 (p) | 5.0s | 256M |
| 3 | JOI 2007 - Circuit | 100 (p) | 5.0s | 256M |
Một anagram của một xâu là xâu thu được bằng cách sắp xếp lại các ký tự của xâu đó. Xâu ban đầu cũng được tính là một anagram của chính nó. Chẳng hạn, EARTH và HEART đều là anagram của HEART.
Một xâu có thể có nhiều anagram khác nhau. Ví dụ, các anagram phân biệt của IOI, theo thứ tự từ điển tăng dần, là IIO, IOI, OII.
Cho một xâu, hãy xác định vị trí của nó trong danh sách tất cả các anagram phân biệt của chính nó, sắp theo thứ tự từ điển tăng dần. Các vị trí được đánh số bắt đầu từ \(1\). Chẳng hạn, EARTH đứng thứ \(28\), còn HEART đứng thứ \(55\) trong danh sách anagram tương ứng.
Đọc từ đầu vào chuẩn một dòng chứa xâu cần xét.
Ghi ra đầu ra chuẩn một số nguyên trên một dòng: vị trí của xâu đã cho trong danh sách các anagram phân biệt theo thứ tự từ điển.
Các bộ dữ liệu được chấm độc lập; không có điều kiện ràng buộc riêng cho từng nhóm.
Ví dụ 1
HEART
55
Ví dụ 2
IOI
2
Một người bạn của bạn làm nghề quản tượng được lệnh đưa voi tới cung điện. Các con đường tới cung điện đều thu phí và người quản tượng phải tự trả tiền. Hãy giúp người ấy tìm một hành trình có tổng phí nhỏ nhất.
Bản đồ gồm các trạm thu phí và các con đường. Cần tuân theo các quy tắc sau:
Voi bắt đầu ở trạm \(1\). Cung điện nằm ngay cạnh trạm \(2\); mục tiêu là tới trạm \(2\).
Đọc từ đầu vào chuẩn:
Các số trên cùng một dòng được phân cách bằng dấu cách.
Ghi ra đầu ra chuẩn tổng phí nhỏ nhất để đi từ trạm \(1\) tới trạm \(2\) theo các quy tắc trên. Nếu không thể tới được trạm \(2\), ghi -1.
Các bộ dữ liệu được chấm độc lập; không có điều kiện ràng buộc riêng cho từng nhóm.
Ví dụ 1
5 6
0 0
10 10
0 10
10 0
2 -6
1 2 30
1 3 4
1 4 5
1 5 1
2 4 3
2 5 1
8
Có hai hành trình hợp lệ tới trạm \(2\): \(1\to2\) và \(1\to4\to2\). Hành trình thứ hai có phí \(5+3=8\), nhỏ hơn phí \(30\) của đường đi trực tiếp. Hành trình \(1\to5\to2\) có phí \(2\) nhưng không hợp lệ, vì hai đoạn đường tạo thành góc nhọn tại trạm \(5\).
Xét một vi mạch (IC) có \(n\) đầu vào ở phía trên và \(n\) đầu ra ở phía dưới. Ở mỗi phía, các đầu được đánh số \(1,2,\ldots,n\) từ trái sang phải. Mỗi đầu vào được nối tới đúng một đầu ra và mỗi đầu ra nhận tín hiệu từ đúng một đầu vào.
Ta mô tả một IC bằng dãy \((a_1,\ldots,a_n)\), trong đó \(a_i\) là số thứ tự của đầu vào nối tới đầu ra \(i\). Chẳng hạn, IC \((2,3,1)\) nối đầu vào \(2\) tới đầu ra \(1\), đầu vào \(3\) tới đầu ra \(2\), và đầu vào \(1\) tới đầu ra \(3\).
Với \(n=3\), có sáu loại IC: \((1,2,3)\), \((1,3,2)\), \((2,1,3)\), \((2,3,1)\), \((3,1,2)\) và \((3,2,1)\).
Khi mắc các IC nối tiếp, đầu ra \(i\) của IC trước được nối với đầu vào \(i\) của IC sau. Ví dụ, mắc nối tiếp năm IC đều có dạng \((2,3,1)\) sẽ có tác dụng giống IC \((3,1,2)\): các đầu ra cuối cùng \(1,2,3\) lần lượt nhận tín hiệu từ các đầu vào ban đầu \(3,1,2\).
Cho \(n\), \(k\) và hoán vị \((a_1,\ldots,a_n)\) của các số từ \(1\) đến \(n\). Hãy xác định có thể mắc nối tiếp \(k\) IC cùng loại để có tác dụng giống IC \((a_1,\ldots,a_n)\) hay không. Nếu có, hãy đưa ra một loại IC thỏa mãn. Nếu có nhiều đáp án, được phép đưa ra bất kỳ đáp án nào.
Đọc từ đầu vào chuẩn, gồm \(n+1\) dòng:
Ghi kết quả ra đầu ra chuẩn.
Nếu có loại IC thỏa mãn, ghi \(n\) dòng mô tả IC đó. Dòng thứ \(i\) (\(1\le i\le n\)) chứa số thứ tự của đầu vào nối tới đầu ra \(i\) của IC cần tìm. Dãy được ghi ra phải là một hoán vị của các số từ \(1\) đến \(n\).
Nếu không tồn tại loại IC thỏa mãn, chỉ ghi một dòng chứa 0.
Các bộ dữ liệu được chấm độc lập; không có điều kiện ràng buộc riêng cho từng nhóm.
Ví dụ 1
3 5
3
1
2
2
3
1
Ví dụ 2
4 4
2
1
4
3
0