| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | JOI 2010 - Contest | 100 (p) | 1.0s | 64M |
| 2 | JOI 2010 - Highway | 100 (p) | 4.0s | 256M |
| 3 | JOI 2010 - Lake | 100 (p) | 1.0s | 256M |
| 4 | JOI 2010 - Plugs | 100 (p) | 1.0s | 64M |
Trên thế giới có vô số cuộc thi lập trình: từ những cuộc thi mà người tham gia tranh tài với các đối thủ trên khắp thế giới như Olympic Tin học, ACM-ICPC và ICFP, đến các cuộc thi trong nước Nhật Bản như Supercomputing Contest, Cuộc thi Máy tính Koshien và EPOCH tại Matsuyama.
Sau khi tham gia những cuộc thi như vậy, một số người muốn tự tổ chức một cuộc thi. Bạn của bạn cũng là một người như thế. Vì bận chuẩn bị đề thi, người bạn ấy nhờ bạn viết chương trình tính điểm của các thí sinh từ nhật ký cuộc thi. Hãy viết một chương trình tính điểm chính xác để góp phần giúp cuộc thi của bạn mình thành công.
Cuộc thi có \(N\) thí sinh, \(M\) bài toán và kéo dài \(T\) giây. Các thí sinh được đánh số từ \(1\) đến \(N\), còn các bài toán được đánh số từ \(1\) đến \(M\).
Với mỗi bài toán, thí sinh xem đề, giải bài rồi nộp mã nguồn lời giải. Cuộc thi bắt đầu ở thời điểm \(0\) và kết thúc ở thời điểm \(T\). Khi một thí sinh xem đề, thời điểm, số hiệu thí sinh và số hiệu bài toán được ghi thành một bản ghi trong nhật ký. Khi một thí sinh nộp mã nguồn lời giải, thời điểm, số hiệu thí sinh, số hiệu bài toán và kết quả đúng hay sai của mã nguồn được ghi thành một bản ghi trong nhật ký.
Kể từ khi cuộc thi bắt đầu, mỗi giây, mỗi thí sinh có thể thực hiện một lần một trong hai thao tác: xem đề của một bài toán hoặc nộp mã nguồn cho một bài toán. Thí sinh không thể nộp mã nguồn cho một bài toán trước khi xem đề của bài đó, cũng không thể nộp thêm mã nguồn cho bài đó sau khi đã nộp đúng.
Giả sử thí sinh \(j\) xem đề bài \(i\) ở thời điểm \(S_{ij}\), nộp sai \(w_{ij}\) lần rồi nộp đúng ở thời điểm \(E_{ij}\). Điểm của thí sinh đó cho bài toán này là
Ở đây, \(p_i\) là số điểm của bài \(i\), còn \(X\) là điểm tối thiểu khi giải đúng một bài, không phụ thuộc vào số hiệu bài toán. Nếu đến khi cuộc thi kết thúc mà thí sinh chưa nộp đúng một bài thì điểm của bài đó là \(0\). Tổng điểm của một thí sinh là tổng điểm của thí sinh đó trên tất cả các bài toán.
Cho \(N\), \(M\), \(T\), \(X\), số bản ghi trong nhật ký, số điểm của từng bài toán và nội dung nhật ký, hãy viết chương trình tính tổng điểm của từng thí sinh.
Đọc dữ liệu từ đầu vào chuẩn.
open, correct, incorrect, cách nhau bởi dấu cách.Chuỗi open cho biết thí sinh đã xem đề; correct cho biết mã nguồn đã nộp là đúng; incorrect cho biết mã nguồn đã nộp là sai.
Ghi ra đầu ra chuẩn \(N\) dòng. Dòng thứ \(j\) chứa tổng điểm của thí sinh số \(j\).
Giới hạn trong kỳ thi gốc: thời gian \(1\) giây, bộ nhớ \(64\) MB.
\(1\le N\le 1\,000\).
Bài này có tổng cộng \(100\) điểm, gồm \(10\) bộ dữ liệu, mỗi bộ \(10\) điểm.
Ví dụ 1
1 3 1200 30 8
50
1000
800
0 1 1 open
100 1 2 open
400 1 1 correct
500 1 2 incorrect
600 1 2 correct
700 1 3 open
800 1 3 incorrect
900 1 3 incorrect
410
Thí sinh số \(1\) nhận được \(30\) điểm ở bài thứ nhất, \(380\) điểm ở bài thứ hai và \(0\) điểm ở bài thứ ba. Điểm của bài thứ hai được tính như sau:
Điểm này bằng \(1000-(600-100)-120\times 1=380\).
Trong đó, \(1000\) là số điểm của bài \(2\), \(600\) là thời điểm nộp đúng, \(100\) là thời điểm xem đề và \(1\) là số lần nộp sai.
Ví dụ 2
3 2 1000 10 10
878
712
0 2 1 open
0 1 1 open
0 3 1 open
100 3 1 correct
100 2 1 correct
100 1 2 open
200 2 2 open
200 1 2 incorrect
300 1 2 correct
300 2 2 correct
392
1390
778
Khi có nhiều thí sinh, có thể có nhiều bản ghi được ghi nhận tại cùng một thời điểm.
Canada có \(N\) thành phố được đánh số từ \(1\) đến \(N\) và \(N-1\) đường cao tốc được đánh số từ \(1\) đến \(N-1\). Mỗi đường cao tốc nối hai thành phố và có thể đi theo cả hai chiều. Mạng lưới đường cao tốc được thiết kế sao cho có thể đi từ bất kỳ thành phố nào đến bất kỳ thành phố nào khác bằng cách đi qua một số đường cao tốc. Nói cách khác, \(N\) thành phố và \(N-1\) đường cao tốc tạo thành một cây.
Bạn được bổ nhiệm làm giám đốc trung tâm thông tin ùn tắc giao thông và phải quản lý thông tin ùn tắc của mạng lưới đường cao tốc này.
Với mỗi đường trong số \(N-1\) đường cao tốc, trung tâm quản lý thời gian cần để đi từ thành phố ở đầu này đến thành phố ở đầu kia theo từng chiều. Chẳng hạn, trong hình dưới đây, các cặp thành phố \(1\) và \(3\), \(3\) và \(4\), \(2\) và \(3\) được nối bằng đường cao tốc. Trung tâm quản lý thời gian đi từ thành phố \(i\) đến thành phố \(j\) cho từng cặp sau:
Lưu ý rằng thời gian đi theo hai chiều của cùng một đường cao tốc không nhất thiết bằng nhau.
Ngoài việc lưu trữ dữ liệu, trung tâm còn thực hiện hai công việc sau.
Thỉnh thoảng, trung tâm nhận được một bản tin ùn tắc gồm ba số nguyên dương \(r\), \(s\), \(t\). Bản tin này cho biết thời gian đi theo chiều thuận của đường cao tốc \(r\) là \(s\), còn thời gian đi theo chiều ngược là \(t\). Chiều thuận là chiều đi từ thành phố có số hiệu nhỏ hơn đến thành phố có số hiệu lớn hơn trong hai đầu của đường cao tốc; chiều ngược là chiều còn lại. Trung tâm cập nhật dữ liệu theo bản tin này.
Trung tâm cũng có thể nhận được một cuộc gọi hỏi thông tin, được biểu diễn bởi hai số nguyên dương \(x\), \(y\). Khi đó, dựa trên dữ liệu hiện tại, trung tâm phải tính và trả lời thời gian cần để đi từ thành phố \(x\) đến thành phố \(y\).
Cho dãy các bản tin ùn tắc và yêu cầu hỏi thông tin trong một ngày, gọi chung là các truy vấn, theo thứ tự thời gian. Hãy viết chương trình in đáp án cho từng yêu cầu hỏi thông tin. Trước khi nhận bản tin ùn tắc đầu tiên, thời gian đi theo mỗi chiều của tất cả \(N-1\) đường cao tốc đều bằng \(1\).
Đọc dữ liệu từ đầu vào chuẩn.
I r s t hoặc Q x y, với các thành phần cách nhau bởi dấu cách.Truy vấn I r s t là bản tin ùn tắc: cập nhật thời gian đi theo chiều thuận của đường cao tốc \(r\) thành \(s\) và theo chiều ngược thành \(t\). Truy vấn Q x y yêu cầu thời gian đi từ thành phố \(x\) đến thành phố \(y\); hai thành phố này khác nhau.
Ghi ra đầu ra chuẩn số dòng bằng số truy vấn Q trong dữ liệu vào. Dòng thứ \(i\) chứa một số nguyên là đáp án cho yêu cầu hỏi thông tin thứ \(i\).
Giới hạn trong kỳ thi gốc: thời gian \(4\) giây, bộ nhớ \(256\) MB.
\(2\le N\le 100\,000\).
I r s t: \(1\le r\le N-1\), \(1\le s\le 1\,000\), \(1\le t\le 1\,000\).Q x y: \(1\le x,y\le N\) và \(x\ne y\).Bài này có tổng cộng \(100\) điểm, gồm \(16\) nhóm kiểm thử, mỗi nhóm \(5\) điểm và chứa \(1\) bộ dữ liệu, cùng \(2\) nhóm kiểm thử, mỗi nhóm \(10\) điểm và chứa \(2\) bộ dữ liệu. Có tất cả \(20\) bộ dữ liệu. Chỉ nhận điểm của một nhóm khi chương trình cho kết quả đúng trên tất cả các bộ dữ liệu trong nhóm, kết thúc bình thường (trả về mã \(0\)) và tuân thủ giới hạn thời gian, bộ nhớ.
Ví dụ 1
4 5
1 3
3 4
2 3
I 1 7 9
Q 2 4
I 3 12 11
Q 2 4
Q 4 2
2
13
12
Ở phía đông nam Canada, tại khu vực biên giới với Hoa Kỳ, có năm hồ nổi tiếng được gọi chung là Ngũ Đại Hồ. Nhân dịp IOI được tổ chức tại Canada, nhiều kế hoạch khai thác thuyền du lịch trên hồ Ontario, hồ gần địa điểm tổ chức nhất, đã được đề xuất.
Mỗi kế hoạch khai thác thuyền du lịch nối hai điểm trên bờ hồ. Có tất cả \(N\) kế hoạch; kế hoạch thứ \(i\) cho thuyền hoạt động giữa điểm \(s_i\) và điểm \(t_i\). Ở đây, điểm \(x\) là điểm đạt được khi xuất phát từ điểm cực đông của hồ rồi đi dọc theo bờ hồ ngược chiều kim đồng hồ một quãng đường \(x\) mét. Chiều dài một vòng bờ hồ là \(500\,000\) mét.
Người ta muốn thực hiện càng nhiều kế hoạch càng tốt. Tuy nhiên, để tránh các thuyền va chạm nhau, không được có hai tuyến thuyền giao nhau.
Cho \(N\) kế hoạch khai thác thuyền, hãy viết chương trình tìm số kế hoạch lớn nhất có thể thực hiện.
Đọc dữ liệu từ đầu vào chuẩn.
Tất cả \(2N\) giá trị \(s_1,\ldots,s_N,t_1,\ldots,t_N\) đều khác nhau.
Ghi ra đầu ra chuẩn một số nguyên là số kế hoạch lớn nhất có thể thực hiện trong các kế hoạch đã cho.
Giới hạn trong kỳ thi gốc: thời gian \(1\) giây, bộ nhớ \(256\) MB.
\(1\le N\le 2\,000\).
Bài này có tổng cộng \(100\) điểm, gồm \(10\) bộ dữ liệu, mỗi bộ \(10\) điểm.
Ở đất nước JOI có \(N\) công ty sản xuất phích cắm điện. Mỗi công ty được cấp một mã số nguyên từ \(1\) đến \(N\). Mỗi công ty sản xuất một kiểu phích cắm cùng ổ cắm tương ứng, nhưng điều phiền phức là phích cắm và ổ cắm của mỗi công ty lại có hình dạng khác với của tất cả các công ty khác.
Luật của JOI quy định rằng ổ cắm phải được in mã công ty sản xuất, còn trên phích cắm thì không có mã công ty. Để có thể đáp ứng nhanh yêu cầu của khách hàng trong hoàn cảnh đó, chủ một cửa hàng đồ điện có một hộp dụng cụ chứa đủ \(N\) loại phích cắm có ở JOI, mỗi loại một chiếc, được xếp theo thứ tự mã công ty. Tuy nhiên, một ngày nọ, ông vô tình làm các phích cắm trong hộp bị xáo trộn. Ông có thể nhận ra rằng một loại phích cắm nào đó không cắm vừa một loại ổ cắm nào đó, nhưng không thể chỉ nhìn phích cắm mà biết công ty sản xuất. Vì vậy, ông không thể xếp lại các phích cắm như cũ. Cuối cùng, trong lúc hết sức bối rối, ông nhờ giáo sư L, người nổi tiếng có thể dễ dàng giải quyết mọi bài toán khó.
Để tiện phân biệt, giáo sư L đánh số các phích cắm đã bị xáo trộn từ \(1\) đến \(N\), rồi dựa trên cách đánh số đó thu thập \(M\) lời khẳng định từ người chủ cửa hàng. Lời khẳng định thứ \(k\) là: “Không phích cắm nào mang số từ \(C_k\) đến \(D_k\) cắm vừa bất kỳ ổ cắm nào có mã công ty từ \(A_k\) đến \(B_k\).” Các khoảng này đều bao gồm cả hai đầu mút.
Sau đó, giáo sư L nói: “Bí ẩn đã được giải quyết. Chỉ có duy nhất một cách ghép các phích cắm với công ty sản xuất thỏa mãn \(M\) lời khẳng định này. Phần còn lại ta giao cho con.” Rồi giáo sư ra về. Dù việc này thật vô lý, bạn, người học trò của giáo sư, phải giải quyết bài toán và cho chủ cửa hàng biết phích cắm nào do công ty nào sản xuất.
Hãy viết chương trình xác định sự tương ứng giữa các phích cắm và công ty sản xuất dựa trên những lời khẳng định của chủ cửa hàng.
Đọc dữ liệu từ đầu vào chuẩn.
Ghi ra đầu ra chuẩn \(N\) dòng. Dòng thứ \(i\) chứa số hiệu của phích cắm do công ty có mã \(i\) sản xuất.
Giới hạn trong kỳ thi gốc: thời gian \(1\) giây, bộ nhớ \(64\) MB.
\(1\le N\le 3\,000\).
Bài này có tổng cộng \(100\) điểm, gồm \(10\) bộ dữ liệu, mỗi bộ \(10\) điểm.
Ví dụ 1
3 2
1 1 2 3
1 2 3 3
1
2
3
Ví dụ 2
8 7
2 4 2 3
4 7 1 2
6 8 1 4
3 4 3 5
5 6 6 8
6 7 6 7
7 8 6 6
2
4
1
6
3
5
8
7