| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | JOI 2012 - Chinese | 100 (p) | 1.5s | 64M |
| 2 | JOI 2012 - Copy and Paste | 100 (p) | 17.0s | 512M |
| 3 | JOI 2012 - Invitation | 100 (p) | 3.0s | 128M |
Toàn bộ \(N\) thành viên của Ủy ban Olympic Tin học Nhật Bản, trong đó có chủ tịch K, cùng đến một nhà hàng Trung Hoa.
Bàn ăn là một chiếc bàn tròn với \(N\) chỗ ngồi cách đều nhau. Ở giữa bàn có một mâm xoay để đặt các món ăn. Các thành viên ngồi vào \(N\) chỗ; chủ tịch K được đánh số \(1\), các thành viên tiếp theo được đánh số \(2,3,\ldots,N\) theo chiều ngược kim đồng hồ.
Ủy ban gọi \(N\) món ăn khác nhau, mỗi món một phần, và đặt chúng trên mâm xoay. Ban đầu, món \(i\) nằm ngay trước mặt thành viên \(i\) với mọi \(1 \le i \le N\). Mỗi thành viên ngoài chủ tịch K đã chọn sẵn một món muốn ăn: thành viên \(i\) muốn ăn món \(A_i\), với \(2 \le i \le N\).
Mâm xoay có thể quay theo cả hai chiều, mỗi đơn vị quay là một góc:
Ví dụ, nếu quay mâm ngược chiều kim đồng hồ một đơn vị từ trạng thái ban đầu, món \(N\) sẽ ở trước mặt chủ tịch K, còn món \(i-1\) sẽ ở trước mặt thành viên \(i\) với \(2 \le i \le N\). Một thành viên chỉ có thể ăn một món khi món đó nằm ngay trước mặt mình.
Vì chủ tịch K rất được kính trọng, ông là người đầu tiên quay mâm để món \(k\) (\(1 \le k \le N\)) đến trước mặt mình rồi ăn món đó. Sau khi chủ tịch ăn xong, các thành viên còn lại lần lượt quay mâm để món họ muốn ăn đến trước mặt mình rồi ăn. Thứ tự của các thành viên còn lại có thể tùy ý. Mỗi món đều có đủ thức ăn và không bao giờ hết.
Để chuẩn bị cho mọi lựa chọn của chủ tịch K, với mỗi \(k\) từ \(1\) đến \(N\), hãy tính tổng số đơn vị quay mâm nhỏ nhất để tất cả các thành viên đều được ăn món mình chọn. Tổng này bao gồm cả lần quay đầu tiên của chủ tịch K.
Đọc dữ liệu từ đầu vào chuẩn:
In ra đầu ra chuẩn \(N\) dòng. Dòng thứ \(k\) (\(1 \le k \le N\)) chứa tổng số đơn vị quay mâm nhỏ nhất khi chủ tịch K chọn món \(k\). Một đơn vị quay tương ứng với góc \(360/N\) độ.
Các tỉ lệ trên là các điều kiện tích lũy; không cộng chúng thành các nhóm điểm độc lập.
Ví dụ 1
5
3
5
3
2
4
4
5
6
4
Năm thành viên ngồi quanh bàn như hình dưới đây.
Ví dụ, với \(k=3\), một cách quay mâm có tổng lượng quay nhỏ nhất là:
Tổng lượng quay là \(2+1+2=5\) đơn vị, nên dòng thứ ba của kết quả là \(5\).
Sao chép và dán là một trong những chức năng quan trọng nhất của trình soạn thảo văn bản. Công ty JOI bắt đầu phát triển một trình soạn thảo có thể xử lý các thao tác này rất nhanh. Là một lập trình viên giỏi của công ty, bạn được giao nhiệm vụ cài đặt phần xử lý cốt lõi. Tương lai của công ty phụ thuộc vào công việc này, nên bạn cần viết một chương trình vừa chính xác vừa nhanh.
Ban đầu, nội dung tệp là xâu \(S\). Sau đó, thực hiện \(N\) thao tác sao chép và dán. Trong thao tác thứ \(i\), sao chép đoạn xâu từ vị trí \(A_i\) đến vị trí \(B_i\), rồi chèn bản sao vào vị trí \(C_i\) của xâu hiện tại.
Ở đây, vị trí \(x\) là ranh giới ngay sau \(x\) ký tự đầu tiên của xâu; vị trí \(0\) là đầu xâu. Vì vậy, đoạn được sao chép gồm \(B_i-A_i\) ký tự nằm giữa hai ranh giới \(A_i\) và \(B_i\). Các vị trí \(A_i\), \(B_i\), \(C_i\) đều được xác định trên xâu ngay trước thao tác; việc sao chép không xóa đoạn gốc.
Nếu sau khi chèn, độ dài xâu vượt quá \(M\), xóa các ký tự từ cuối xâu cho đến khi độ dài còn đúng \(M\).
Cho giới hạn độ dài \(M\), xâu ban đầu \(S\) và thông tin của \(N\) thao tác, hãy tìm xâu thu được sau tất cả các thao tác.
Đọc dữ liệu từ đầu vào chuẩn:
In ra đầu ra chuẩn một dòng chứa xâu thu được sau \(N\) thao tác.
Ví dụ 1
18
copypaste
4
3 6 8
1 5 2
4 12 1
17 18 0
acyppypastoopyppyp
Ban đầu, xâu là copypaste. Bốn thao tác được thực hiện như sau:
ypa, rồi chèn vào vị trí \(8\), thu được copypastypae.opyp, rồi chèn vào vị trí \(2\), thu được coopyppypastypae.yppypast, rồi chèn vào vị trí \(1\), thu được cyppypastoopyppypastypae. Vì độ dài vượt quá \(M=18\), xóa bớt ký tự ở cuối để còn cyppypastoopyppypa.a, rồi chèn vào vị trí \(0\), thu được acyppypastoopyppypa. Tiếp tục xóa bớt ký tự ở cuối vì độ dài vượt quá \(18\), thu được kết quả acyppypastoopyppyp.Ví dụ 2
100
joi
3
0 1 0
3 4 3
2 3 3
jjooii
Năm 20XX, kỳ thi IOI cuối cùng cũng được tổ chức tại thị trấn JOI của đất nước JOI. Một bữa tiệc sẽ được tổ chức để kỷ niệm sự kiện này. Thị trấn có \(A\) con chó được đánh số từ \(1\) đến \(A\) và \(B\) con mèo được đánh số từ \(1\) đến \(B\). Bạn muốn mời cả \(A+B\) con vật đến dự tiệc.
Giữa những con chó và mèo có \(N\) nhóm bạn thân. Nhóm thứ \(i\) gồm tất cả \(Q_i-P_i+1\) con chó có số hiệu từ \(P_i\) đến \(Q_i\) và tất cả \(S_i-R_i+1\) con mèo có số hiệu từ \(R_i\) đến \(S_i\). Nhóm này có độ thân thiết là số nguyên dương \(T_i\). Một con vật có thể thuộc nhiều nhóm hoặc không thuộc nhóm nào.
Bạn rất thân với con chó số \(C\) và đã mời thành công con chó đó. Bạn sẽ lặp lại quy trình sau để mời những con vật còn lại:
Cho \(A\), \(B\), \(C\) và thông tin của \(N\) nhóm bạn thân, hãy xác định liệu có mời thành công tất cả các con vật hay không. Nếu có, hãy tính tổng giá trị hạnh phúc của những con vật được chọn qua các bước của quy trình. Con chó số \(C\) đã được mời từ trước nên không đóng góp vào tổng này.
Đọc dữ liệu từ đầu vào chuẩn:
In ra đầu ra chuẩn một dòng chứa một số nguyên:
Các tỉ lệ trên là các điều kiện tích lũy; không cộng chúng thành các nhóm điểm độc lập.
Ví dụ 1
5 6 3
4
2 4 1 3 20
1 2 2 4 40
4 5 2 3 30
4 4 4 6 10
280
Ban đầu, chó \(3\) đã được mời thành công.
Giá trị hạnh phúc của chó \(2\), chó \(4\), mèo \(1\), mèo \(2\) và mèo \(3\) đều là \(20\); các con vật chưa được mời khác có giá trị \(0\). Vì ưu tiên chó rồi đến số hiệu nhỏ nhất, bạn chọn chó \(2\) và mời thành công.
Sau đó, chó \(1\) có giá trị hạnh phúc \(40\), chó \(4\) có giá trị \(20\), mèo \(1\) có giá trị \(20\), các mèo \(2\), \(3\), \(4\) có giá trị \(40\), còn các con vật chưa được mời khác có giá trị \(0\). Bạn chọn chó \(1\) và mời thành công.
Tiếp tục quy trình, tất cả các con vật được mời theo thứ tự sau:
| Con vật | Số hiệu | Giá trị hạnh phúc khi được mời |
|---|---|---|
| Chó | \(3\) | — |
| Chó | \(2\) | \(20\) |
| Chó | \(1\) | \(40\) |
| Mèo | \(2\) | \(40\) |
| Mèo | \(3\) | \(40\) |
| Mèo | \(4\) | \(40\) |
| Chó | \(4\) | \(30\) |
| Chó | \(5\) | \(30\) |
| Mèo | \(1\) | \(20\) |
| Mèo | \(5\) | \(10\) |
| Mèo | \(6\) | \(10\) |
Tổng các giá trị hạnh phúc trong bảng là \(280\), nên in ra \(280\).
Ví dụ 2
10 10 1
2
1 5 1 5 3
6 10 6 10 4
-1
Sau khi mời chó \(1\), \(2\), \(3\), \(4\), \(5\) và mèo \(1\), \(2\), \(3\), \(4\), \(5\), con vật được chọn tiếp theo là chó \(6\), có giá trị hạnh phúc bằng \(0\). Vì vậy việc mời thất bại giữa chừng và kết quả là \(-1\).