Python Basic Contest #01 - Tổng các tích

Sunlight

Bạn được cho một dãy số nguyên dương a_1, a_2, ..., a_n. Bạn hãy tính tổng các tích của các dãy con liên tiếp khác rỗng của dãy số trên, hay nói cách khác, hãy tính tổng các giá trị a_l \times a_{l + 1} \times ... \times a_r với mọi 1 \le l \le r \le n.

Input, Output và Subtask

Input (bàn phím)
  • Dòng đầu tiên gồm số nguyên dương n (n \le 10^5).
  • Dòng tiếp theo gồm n số nguyên dương a_i (a_i \le 10^9).
Output (màn hình)
  • Một dòng duy nhất là kết quả bài toán. Vì kết quả có thể rất lớn nên bạn chỉ cần in ra phần dư của nó khi chia cho 10^9 + 7.
Subtask
Tỉ lệ điểm (%) Giới hạn
40 n \le 10^2
40 n \le 10^3
20 n \le 10^5
Sample 1
Input (bàn phím)
3
1 2 3
Output (màn hình)
20
Notes
  • Kết quả của bài toán là 1 + 2 + 3 + 1 \times 2 + 2 \times 3 + 1 \times 2 \times 3 = 20.
Sample 2
Input (bàn phím)
5
1 2 3 4 5
Output (màn hình)
409

Python Basic Contest #01 - Lưu trữ dữ liệu (Python only)

Sunlight

Đây là một phiên bản khó hơn của bài toán trong sách giáo khoa. Statement được chép nguyên văn từ sách.

Hồng có n file dữ liệu được đánh số từ 0 đến n - 1 và có kích thước tương ứng là s_0, s_1, ..., s_{n - 1} (Mb). Hồng muốn tìm cách lưu trữ nhiều file dữ liệu nhất bằng hai đĩa ổ cứng, mỗi ổ có dung lượng d (Mb). Bạn hãy lập trình giúp Hồng giải quyết bài toán.

Input, Output và Subtask

Input (bàn phím)
  • Dòng đầu tiên gồm hai số nguyên dương n, d (n, d \le 1000).
  • Dòng tiếp theo gồm n số nguyên dương s_i (s_i \le 1000).
Output (màn hình)
  • Một dòng duy nhất gồm số lượng file dữ liệu lớn nhất có thể lưu trữ được.
Spoiler
  • May cho các bạn là mình không yêu cầu các bạn truy vết .
Subtask
Tỉ lệ điểm (%) Giới hạn
40 n \le 10
30 n \le 16
20 n, d, s_i \le 128
10 Không có giới hạn gì thêm
Sample 1
Input (bàn phím)
5 8
1 2 3 4 5
Output (màn hình)
5
Notes
  • Ta có thể lưu các file 1, 2, 5 vào đĩa 1 và 3, 4 vào đĩa 2.
Sample 2
Input (bàn phím)
5 10
4 5 6 7 5
Output (màn hình)
4

Python Basic Contest #01 - Lưu trữ dữ liệu

Sunlight

Đây là một phiên bản khó hơn của bài toán trong sách giáo khoa. Statement được chép nguyên văn từ sách.

Hồng có n file dữ liệu được đánh số từ 0 đến n - 1 và có kích thước tương ứng là s_0, s_1, ..., s_{n - 1} (Mb). Hồng muốn tìm cách lưu trữ nhiều file dữ liệu nhất bằng hai đĩa ổ cứng, mỗi ổ có dung lượng d (Mb). Bạn hãy lập trình giúp Hồng giải quyết bài toán.

Input, Output và Subtask

Input (bàn phím)
  • Dòng đầu tiên gồm hai số nguyên dương n, d (n, d \le 1000).
  • Dòng tiếp theo gồm n số nguyên dương s_i (s_i \le 1000).
Output (màn hình)
  • Một dòng duy nhất gồm số lượng file dữ liệu lớn nhất có thể lưu trữ được.
Spoiler
  • May cho các bạn là mình không yêu cầu các bạn truy vết .
Subtask
Tỉ lệ điểm (%) Giới hạn
40 n \le 10
30 n \le 16
20 n, d, s_i \le 128
10 Không có giới hạn gì thêm
Sample 1
Input (bàn phím)
5 8
1 2 3 4 5
Output (màn hình)
5
Notes
  • Ta có thể lưu các file 1, 2, 5 vào đĩa 1 và 3, 4 vào đĩa 2.
Sample 2
Input (bàn phím)
5 10
4 5 6 7 5
Output (màn hình)
4

A problem with a sussy content

flo

Đây là một câu chuyện có thật, tuy nhiên đã được biển đổi một chút.

Bạn cũng nên thử bài này

TLEoj được nhiều người biết đến là một trang chấm bài trực tuyến với vô vàng bài tập thú vị và những con người thân thiện. Ngoài ra, TLEoj cũng thường xuyên tổ chức các cuộc thi lập trình để những người nơi đây học hỏi thêm nhiều điều mới lạ hơn. Sau những cuộc thi ấy là một nhóm setter chăm chỉ, thường nghĩ ra những bài tập hay ho, thú vị cho mọi người nơi đây làm và flo của chúng ta là một trong số đó.

Sau một giấc ngủ thoải mái, flo tỉnh dậy và kiểm tra tin nhắn của mình. Bỗng cậu thấy có một tin nhắn được gửi đến với nội dung như sau:

Nội dung tin nhắn

  • Nhóm setter TLEoj bọn bây quá gà, set toàn bài dở mà bày đặt tổ chức contest. Toàn mấy bài rách không ai thèm làm.

Vì là một trong những admin chính của TLEoj, flo đã rất bực mình và cay cú với người gửi tin nhắn trên. Thế là cậu bắt tay vào làm ngay một bài siêu khó để gửi lại cho người ấy như là một thử thách. Bài ấy có nội dung được tiết lộ như sau.

Nội dung bài

Cho n điểm cùng với 1 điểm O trên mặt phẳng tọa độ, điểm thứ i có tọa độ là (x_i, y_i), điểm O có tọa độ là (x_o, y_o) và các tọa độ sẽ phân biệt với nhau. Giá trị D của 2 điểm (x_i, y_i), (x_j, y_j) là khoảng cách ngắn nhất giữa đường thẳng cắt hai điểm đó và điểm O.

Nhiệm vụ của bạn là tìm giá trị D của 2 điểm bất kỳ trong n điểm trên sao cho nó có giá trị lớn thứ n.

Tuy là người ra bài nhưng flo lại không thể nào giải được bởi lẽ nó quá khó. Là một con người thân thiện ở TLEoj, bạn hãy giúp flo nhé.

Input, Output and Scoring

Input

  • Ba số nguyên dương n, x_o, y_o (3 \le n \le 2 \times 10^5; -10^6 \le x_o, y_o \le 10^6).
  • n dòng tiếp theo, dòng thứ i chứa tọa độ điểm i là (x_i, y_i) (-10^6 \le x_i, y_i \le 10^6).

Output

  • In ra giá trị D và lấy 8 chữ số thập phân đầu tiên.
  • Kết quả của bạn sẽ được chấp nhận nếu chênh lệch giữa nó và đáp án không quá 10^{-8}.

Scoring

  • Subtask 1 (30\%): 1 \le n \le 2 \times 10^3.
  • Subtask 2 (70\%): Không giởi hạn gì thêm.

Example

Input

3 1 2
-3 4
5 -1
3 6

Output

0.42399824
Note
  • Ta có thể thấy khoảng cách từ O đến đường thẳng AB là lớn thứ 3.
  • Hình ở dưới có 1 chút sai lệch mà mình chỉnh không được dẫn đến kết quả khác ở trên.

TLEoj Contest #09 - Mua bánh trung thu

Trong lúc các bạn đang ngồi đánh vật với đề thi củ chuối (có 1 bài troll) (và 3 bài bait) này thay vì ra ngoài đi chơi Trung Thu như bao người khác (vì bạn vẫn đang bitchless) (hoặc đã trở thành social outcast) (hoặc gia đình bạn đã bỏ mặc bạn ở nhà và chở thằng/con em của bạn đi chơi), ở đâu đó trong thành phố Hà Nội, thằng ra đề đang đi ăn cùng với mấy đứa bạn của nó (chắc chắn không phải vì somehow sinh nhật thứ 16 của nó lại đúng vào đêm Trung Thu). Để giúp các bạn cảm thấy cuộc sống đỡ bất công hơn, thằng ra đề xin được phép kể một câu chuyện như sau.

Để chuẩn bị cho sinh nhật lần thứ 16 của mình (đồng thời cũng trùng vào đêm Trung Thu của năm 2123), Lib đã nghĩ ra một ý tưởng vô cùng táo bạo (và khá hợp lí): Mua bánh trung thu thay cho bánh sinh nhật. Lib đã xác định được vị trí của N cửa hàng bán bánh trung thu trên thành phố. Vì muốn lần sinh nhật này trở thành troconbo lớn nhất từ trước đến nay, Lib muốn mua được nhiều bánh trung thu nhất có thể. Bình thường, mỗi lần ra đường, Lib chỉ toàn mặc đồng phục trường (không phải là do muốn ngạo nghễ trường chuyên vi en mà là do gu thời trang quá tệ và không biết mặc gì khác). Tuy nhiên, do đã gần đến Trung Thu và nhu cầu tiêu thụ bánh của mọi người đều rất cao, các cửa hàng chỉ bán bánh cho mỗi khách hàng đúng 1 lần. Tất cả các chủ cửa hàng đều có khả năng nhớ mặt rất tốt - Lib đã thử cách chờ 10^9+7s rồi sau đó đến mua lại, và kết quả là bị chửi cho sấp mặt. Chợt nhớ đến việc ở nhà ông bà ngoại mới có 1 bộ outfit cosplay gái alime mới mua (chắc chắn không phải do bị 1 thằng nhóc lớp 9 lên 10 nào đó dụ mua để [REDACTED][REDACTED][REDACTED][REDACTED]), Lib đã vứt hết liêm sỉ đi để dùng bộ đồ cosplay làm disguise để đi mua bánh ở một cửa hàng nào đó (không nằm trong N cửa hàng đã biết đến). Mọi chuyện đã rất suôn sẻ cho đến khi bác bán hàng - vi một lí do thần kì nào đó, check lại địa chỉ nhà và nhận ra Lib đã đến mua bánh trước đó 2 \times 10^9+7s rồi. Và thế là lại bị chửi sấp mặt. Bằng một cách thần kì nào đó, mọi chủ cửa hàng ở năm 2123 đều là bậc thầy doxxing và biết được chính xác địa điểm mà Lib bắt đầu đạp xe ra khỏi nhà.

Bản đồ giao thông của thành phố Hà Nội (mà Lib cần quan tâm đến trong hành trình mua bánh này) gồm N điểm - N cửa hàng bánh trung thu và N-1 con đường hai chiều được đánh số từ 1 tới N-1. Con đường thứ i trong số N-1 con đường này nối giữa 2 điểm U_i và V_i với nhau, và Lib mất T_i phút để đi hết con đường đó bằng xe đạp. Nhà của Lib nằm ở điểm A, nhà ông bà nằm ở điểm B (Đảm bảo A < B, ở 2 điểm A và B này cũng có cửa hàng bán bánh (nhưng mà là ở đối diện nhà)).

Ở thời điểm năm 2123, công nghệ dịch chuyển tức thời đã trở nên hoàn thiện - người người nhà nhà (bọn nhà giàu) ai ai cũng có các bộ dịch chuyển. Ở mỗi cửa hàng bán bánh đều có 1 bộ dịch chuyển loại "xịn" - có thể dịch chuyển người dùng đến bất kì đâu trên hệ thống thành phố. Liên minh chủ của các tiệm bánh, tuy vô cùng ki bo, luôn sẵn sàng hỗ trợ k hháchàng di chuyển nhanh hơn (dĩ nhiên là sau khi họ đã mua bánh, chả ai ki bo đến mức tổng sỉ vả 1 thằng bé vì nó muốn mua thêm bánh mà lại cho người ta teleport free cả). Dĩ nhiên, sự hỗ trợ này cũng chỉ là có giới hạn: Nếu chủ cửa hàng biết rằng khách hàng bắt đầu hành trình từ điểm I và khoảng cách giữa điểm I đó và tiệm bánh là K, chủ cửa hàng sẵn sàng giúp khách hàng dịch chuyển và tiết kiệm 1 khoảng cách tối đa là K.
Cụ thể hơn, trong hình dưới đây, nếu khách hàng bắt đầu tại điểm X và tiệm bánh ở điểm Y, giả sử rằng độ dài cạnh của tất cả các ô vuông là như nhau, chủ tiệm sẽ vui vẻ giúp khách dịch chuyển nếu điểm đến mà khách hàng chọn thuộc vùng màu đỏ (còn nếu vào vùng màu đen là lại ăn chửi tiếp). Giả sử việc mua bánh dịch chuyển và thay quần áo là không mất thời gian, chỉ tính thời gian Lib phải di chuyển từ nhà đến các tiệm bánh bằng xe đạp.

(Giải thích ví dụ: Khoảng cách giữa X và Y trong hình đính kèm là 7. Vùng màu đỏ là những vùng 1 khách hàng xuất phát từ X, mua bánh ở Y được phép dịch chuyển đến. Vùng màu xanh là vùng sẽ bị từ chối sử dụng thiết bị dịch chuyển + ăn chửi).

Nhà của Lib thì không giàu đến thế và chỉ có 1 cặp bộ dịch chuyển loại "dởm": Khi cần, chỉ có thể dịch chuyển từ đầu này sang đầu kia của bộ dịch chuyển này. Gọi 2 đầu này lần lượt là I và II. Tuy nhiên, do khả năng doxxing của các chủ tiệm bánh đã đạt đến một cảnh giới vô cùng vi diệu, các bác luôn biết được địa điểm bắt đầu của một hành trình mua bánh - kể cả khi sử dụng cổng dịch chuyển - vì vậy, nếu muốn việc mua bánh lần 2 từ cùng 1 cửa hàng trót lọt, 2 hành trình đi mua bánh phải được bắt đầu ở 2 địa điểm khác nhau . Ngoài ra, do xe đạp của Lib có khả năng chống xóc cực tệ (đến mức, nếu nó có ý thức, nó sẽ ngay lập tức trở thành "bartender of the year" ở mọi nơi mà nó đến) nên sau khi mua được 1 cái bánh, Lib không thể mua thêm cái bánh nào khác mà phải trở về hoặc nhà (ở A) hoặc nhà ông bà (ở B) để cất bánh trước khi có thể mua thêm bánh mới. Ngoài ra, sau khi mua bánh xong, Lib cũng cần phải cất lại quần áo cosplay gái alime ở nhà ông bà (để không bị dính gay seggs allegations) và đảm bảo rằng 2 đầu I và II được đặt về đúng chỗ của nó (để không bị ăn chửi vì làm mất đồ của gia đình).

Tính từ thời điểm lên ý tưởng, sau 18 ngày và 45 lần suy đi tính lại, Lib đã nghĩ được 1 hành trình để có thể mua được nhiều bánh nhất có thể. Kể từ thời điểm đó đến sinh nhật Lib chỉ còn đúng K phút để có thể đi mua bánh. Dù đã tính được số bánh tối đa có thể mua (và đã mất hết liêm sỉ đến mức sẵn sàng tống việc cosplay gái alime vào đề bài) và lên được hành trình tối ưu để mua bánh, Lib muốn thách thức bạn tìm ra được số bánh tối ưu và 1 trong số các hành trình tối ưu thỏa mãn đó (để không bị @ trong lúc đang ăn sinh nhật). Nếu có nhiều hành trình mua được số bánh tối đa trong thời gian cho phép, in ra 1 hành trình thỏa mãn bất kì. Bạn không cần phải in cụ thể chỉ dẫn cho tất cả các hành động - Lib sẽ tự động tìm cách để đi mua bánh với thời gian tối ưu theo phương pháp mà bạn tìm được. Nếu bạn tìm được 1 hành trình mua được số bánh tối đa thỏa mãn (và in được ra), bạn sẽ được 100\% số điểm cho testcase đó. Nếu bạn chỉ xác định được số bánh trung thu tối đa có thể mua, bạn sẽ được 50\% số điểm cho testcase đó.

Yêu cầu: Tính số lượng bánh trung thu tối đa mà Lib có thể mua được, đồng thời in ra một thứ tự đi thăm các tiệm bánh thỏa mãn.

Input, Output, Contraints and Subtasks

Input

  • Dòng đầu tiên gồm 4 số N, A, B, K - lần lượt là số tiệm bánh, vị trí nhà chính và nhà ông bà ngoại của Lib, và thời gian còn lại (tính theo phút) cho đến sinh nhật Lib.
  • N-1 dòng tiếp theo, dòng thứ i gồm 3 số U_i, V_i, T_i, trong đó:
  • U_i, V_i: Điểm bắt đầu và kết thúc của đoạn đường thứ i.
  • T_i: Thời gian (tính theo phút) mà Lib cần để di chuyển giữa 2 đầu của con đường thứ i.

Output

  • Dòng thứ nhất gồm 1 số C - Số bánh trung thu lớn nhất mà Lib có thể mua được trong không quá K phút.
  • Dòng thứ 2 gồm C số, số thứ i tương ứng với nơi chiếc bánh thứ i được mua.

Contraints

  • 2 \le N \le 300000.
  • 1 \le A, B \le N. Dữ liệu đầu vào đảm bảo A khác B.
  • 0 \le K \le 10^{18}.
  • 1 \le U_i, V_i \le N (với mọi 1 \le i \le N-1)
  • 1 \le T_i \le 10^6 (với mọi 1 \le i \le N-1)
  • Mạng lưới đường đi liên thông: Có thể di chuyển giữa 2 điểm bất kì trong số N điểm cho sẵn chỉ bằng các con đường đã cho sẵn

Subtasks

  • Với các subtask từ 5 đến 8, có 40\% số testcase thỏa mãn: Trên đường đi từ A đến B, mỗi tiệm bánh chỉ có đường đi trực tiếp đến tối đa 2 tiệm bánh khác.
  • Subtask 1 (7\% số điểm) : N \le 300000, mỗi tiệm bánh chỉ có đường đi trực tiếp đến tối đa 2 tiệm bánh khác, A và B chỉ kề với đúng 1 tiệm bánh, K sẽ bằng thời gian di chuyển từ A đến B.
  • Subtask 2 (8\% số điểm) : N \le 35, mỗi tiệm bánh chỉ có đường đi trực tiếp đến tối đa 2 tiệm bánh khác.
  • Subtask 3 (9\% số điểm) : N \le 350, mỗi tiệm bánh chỉ có đường đi trực tiếp đến tối đa 2 tiệm bánh khác
  • Subtask 4 (16\% số điểm): N \le 300000, mỗi tiệm bánh chỉ có đường đi trực tiếp đến tối đa 2 tiệm bánh khác
  • Subtask 5 (10\% số điểm): N \le 20.
  • Subtask 6 (10\% số điểm): N \le 100.
  • Subtask 7 (10\% số điểm): N \le 2000.
  • Subtask 8 (30\% số điểm): Không có điều kiện gì thêm.

Example 1

Input

7 1 3 15
1 2 2
2 3 4
1 4 3
3 5 5
5 6 3
3 7 2

Output

7
2 7 5 3 2 4 1

Giải thích

Trong test ví dụ này, nhà của Lib ở A, nhà ông bà ngoại ở C.
Đầu I của bộ dịch chuyển đang ở A, đầu II của bộ dịch chuyển đang ở C
Lib sẽ lần lượt hành động như sau:

  • Xuất phát ở A (mặc đồng phục), đi xe đạp đến B mua bánh, cầm theo đầu I (mất 2 phút). Khi đến B, đặt đầu I ở B. Đã mua được bánh đầu tiên ở B.
  • Từ B, dịch chuyển đến điểm M trên BC mà có BM=2 (mất 0 phút).
  • Từ M, đi xe đạp đến C, cất bánh (mất 2 phút).
  • Đi xe đạp từ C đến G để mua bánh (mất 2 phút). Đã mua được bánh thứ 2 ở G.
  • Dịch chuyển từ G về C (mất 0 phút), cất bánh.
  • Cởi đồng phục, mặc cosplay ở C (mất 0 phút).
  • Đạp xe đến E mua bánh (mất 5 phút). Đã mua được bánh thứ 3 ở E.
  • Dịch chuyển từ E về C (mất 0 phút), cất bánh.
  • Chạy sang bên đường, mua bánh ở C, về C cất bánh (mất 0 phút). Đã mua được bánh thứ 4 ở C.
  • Dùng đầu II (đang đặt ở C) ,dịch chuyển đến đầu I đang đặt ở B (mất 0 phút). Lấy lại đầu I. Mua bánh ở B lần thứ 2. Đã mua được bánh thứ 5 ở B.
  • Từ B, dịch chuyển về A, cất bánh (mất 0 phút).
  • Đạp xe từ A đến D, mua bánh (mất 2 phút). Đã mua được bánh thứ 6 ở D.
  • Dịch chuyển từ D về A, cất bánh (mất 2 phút).
  • Chạy sang bên đường ở A, mua bánh, về A cất bánh (mất 0 phút). Đã mua được bánh thứ 7 ở A. Đặt đầu I trở lại A.
  • Dùng đầu I (đang ở A) dịch chuyển đến đầu II (đang ở C). Cởi cosplay gái alime, mặc đồng phục (mất 0 phút).
  • Dịch chuyển từ C về A, kết thúc hành trình (mất 0 phút).
    Tổng thời gian: 2+2+2+5+2+2 = 15 phút.

Example 2

Input

7 1 5 10
1 2 2
2 3 4
1 4 3
3 5 5
5 6 3
3 7 2

Output

5
2 6 4 5 1

Giải thích

Trong test ví dụ này, nhà của Lib ở A, nhà ông bà ở E.
Đầu I đang đặt ở A, đầu II đang đặt ở E.
1 hành trình thỏa mãn:

  • Đi xe đạp từ A đến B, mua bánh (2 phút). Mua bánh thứ nhất ở B
  • Dịch chuyển từ B về A, cất bánh (0 phút)
  • Dịch chuyển từ đầu I (đang ở A) đến đầu II (đang ở E) (0 phút).
  • Đi xe đạp từ E đến F, mua bánh (3 phút). Mua bánh thứ 2 ở F
  • Dịch chuyển từ F về E, cất bánh (0 phút)
  • Dịch chuyển từ đầu II (đang ở E) đến đầu I (đang ở A) (0 phút)
  • Đi xe đạp từ A đến D, mua bánh (3 phút). Mua bánh thư 3 ở D
  • Dịch chuyển từ D về A, cất bánh (0 phút)
  • Dịch chuyển từ đầu I (đang ở A) đến đầu II (đang ở E) (0 phút)
  • Chạy sang bên đường ở E, mua bánh (0 phút). Mua bánh thứ 4 ở E. Chạy về nhà cất bánh
  • Dịch chuyển từ đầu II (đang ở E) đến đầu I (đang ở A) (0 phút)
  • Chạy sang bên đường ở A, mua bánh, chạy về nhà cất bánh (0 phút). Bánh thứ 5 mua ở A.
    Tổng số bánh mua được: 5
    Tổng thời gian: 2+3+3=8 (phút)

Example 3

Input

8 1 5 12
1 2 1
2 3 2
2 7 1
3 4 1
4 5 2
4 6 1
5 8 4

Output

8
4 2 3 6 5 3 1 7

Giải thích

Trong test ví dụ này, nhà của Lib ở A, nhà ông bà ở E.
Cổng I đang ở A, cổng II đang ở E.
Một lộ trình thỏa mãn:

  • Dịch chuyển từ cổng I (đang ở A) đến cổng II (đang ở E) (0 phút)
  • Cởi đồng phục, mặc cosplay gái alime ở E (0 phút).
  • Đạp xe từ E đến D, mua bánh (2 phút). Bánh 1 được mua ở D.
  • Dịch chuyển từ D về E, cất bánh (0 phút).
  • Dịch chuyển từ cổng II (đang ở E) đến cổng I (đang ở A) (0 phút)
  • Đạp xe từ A đến B, mua bánh (1 phút). Bánh 2 được mua ở B
  • Dịch chuyển từ B về A, cất bánh (0 phút)
  • Đạp xe từ A đến C, cầm theo cổng I, mua bánh (3 phút). Bánh 3 được mua ở C. Đặt cổng I tại C
  • Dịch chuyển từ C đến E, cất bánh (0 phút).
  • Cởi quần áo cosplay, mặc đồng phục ở E (0 phút).
  • Đạp xe từ E đến F, mua bánh (3 phút). Bánh 4 được mua ở F.
  • Dịch chuyển từ F về E, cất bánh (0 phút).
  • Chạy sang đường mua bánh ở E, cất bánh (0 phút). Bánh 5 được mua ở E.
  • Dịch chuyển từ cổng II (đang ở E) đến cổng I (đang ở C). Lấy lại cổng I. Mua bánh (0 phút). Bánh 6 được mua ở C.
  • Dịch chuyển từ C về A, cất bánh (0 phút). Đặt cổng I tại A.
  • Chạy sang đường mua bánh ở A, cất bánh (0 phút). Bánh thứ 7 được mua ở A.
  • Đạp xe từ A đến G, mua bánh (2 phút). Bánh thứ 8 được mua ở G.
  • Dịch chuyển từ G về A, cất bánh (0 phút)
    Tổng thời gian: 2+1+3+3+2=11 (phút)
    Số bánh mua được : 8

TLEoj Contest #09 - Lại một bài nữa về vương quốc Byteland

Lib

"Vương quốc Byteland có N thành phố được đánh số từ 0 đến N-1. Giữa các thành phố có M con đường hai chiều được đánh số từ 0 đến M-1. Có K cổng dịch chuyển......"

Đang mơ tưởng về một đề bài nữa để gieo rắc đau đớn và làm khổ các học sinh CP trên toàn thế giới, đức vua của vương quốc Byteland bỗng nhận được thông báo rằng: Các thành phố trong vương quốc Byteland, do đã quá lâu mà không có input gì từ nhà vua (do quý ngài đáng kính của chúng ta đã không làm việc gì ngoài mõm ra các task được 10^9+7 năm rồi) nên đã sắp sửa đánh nhau ầm ầm đến nơi. Mọi chuyện có vẻ không ổn lắm.

Ở vương quốc Byteland hiện tại vẫn có N thành phố - được đánh số từ 1 đến N. Trước đây, giữa các thành phố đều có quan hệ tương đối tốt đẹp với nhau. Tuy nhiên, sau whatever năm phải chịu đựng sự "hữu dụng" của quý ngài problemsetter cho các bài từ IOI đến Codeforces, từ POI đến APIO, cả vương quốc đã bắt đầu tôn thờ 1 vị thần số học. Vì 1 lí do nào đó (chắc chắn không phải là do thằng ra đề muốn thế), giữa 2 thành phố được đánh số i và j, nếu giá trị i*j là số chính phương, mức độ xung đột giữa 2 thành phố này sẽ tự dưng vô cùng bùng nổ và tất cả người dân ở 2 thành phố này đều sẽ cảm thấy như thể cái bọn đến từ thành phố còn lại đã tàn sát cả họ nhà mình vậy. Còn không thì bình thường, không có chuyện gì cả.

Bỗng dưng tỉnh ngộ sau whatever năm chỉ ngồi code mõm, nhà vua muốn biết rằng: Có bao nhiêu cặp thành phố i, j (1 \le i < j \le N) mà giữa 2 thành phố này không có xung đột với nhau.

Tùy vào mức độ không-vô-trách-nhiệm của mình, nhà vua có thể sẵn sàng bỏ ra tận Q ngày (0 \le Q \le 31) để vi hành quanh vương quốc (và tận mắt chứng kiến hậu quả của những hành động của mình). Do ngân sách nhà nước gần như đã không còn, để di chuyển giữa 2 thành phố, nhà vua bắt buộc phải sử dụng các cây cầu vốn đã có sẵn, nối giữa mọi cặp 2 thành phố (i, j) (1 \le i < j \le N). Dù đã xuống cấp trầm trọng, phần lớn những cây cầu vẫn còn có thể đi được. Tuy nhiên, mọi cây cầu kết nối 2 thành phố bị xung đột với nhau đều đã bị phá hủy.

Trong tình hình nguy cấp và tệ hại như vậy, nhà vua muốn xây dựng hành trình cho chuyến vi hành của mình trong mỗi ngày thỏa mãn các điều kiện sau:

  • Trong 1 chuyến vi hành, không có thành phố nào được đi qua nhiều hơn 1 lần.
  • Chỉ sử dụng các cây cầu vẫn còn có thể đi được - nghĩa là, nếu ở bước thứ A đang ở thành phố B thì ở bước thứ A+1 không được phép ở 1 trong các thành phố đang có xung đột với thành phố B.
  • Nhà vua sẽ ưu tiên đi thăm các thành phố có xung đột với thành phố hiện tại sớm nhất có thể: Nếu bước thứ A của đường đi đi qua thành phố B, bước thứ A+2 phải đi qua 1 trong số các thành phố có xung đột với thành phố B mà chưa đi qua (nếu nó có tồn tại). Nếu đến bước thứ A mà không còn thành phố nào xung đột với thành phố đang đi qua nữa, ở bước thứ A+2 đi đến đâu cũng được (dĩ nhiên, phải thỏa mãn tất cả các điều kiện đã nêu ra ở trên.
  • Tuy có mong muốn sẽ có thể hòa giải xung đột giữa các cặp thành phố nếu có thể, nhà vua không muốn cố quá để rồi thành quá cố. Cụ thể hơn, trong chuyến vi hành ở ngày thứ Q (mà ta đang xét đến), không tồn tại 1 nhóm K+1 thành phố đôi một không có xung đột với nhau.
  • Ở mỗi ngày, sẽ có C thành phố quan trọng - sắp xảy ra bạo loạn. Đường đi bắt buộc phải đi qua tất cả C thành phố này.
  • Số thành phố mà đường đi đi qua là lớn nhất có thể.

Yêu cầu: Với mỗi câu hỏi của nhà vua, in ra câu trả lời tương ứng.

Input, Output and Subtasks

Input

  • Dòng đầu tiên gồm 1 số N - số thành phố của vương quốc Byteland.
  • Dòng thứ 2 gồm 1 số Q - số ngày mà nhà vua dự định sẽ bắt đầu 1 chuyến vi hành.
  • Trong Q nhóm dòng tiếp theo, mỗi nhóm dòng bao gồm:
  • Dòng thứ nhất gồm 2 số nguyên K và C, lần lượt là kích thước tối đa của nhóm các thành phố đôi một không có xung đột, và số thành phố quan trọng.
  • Dòng thứ 2 gồm C số nguyên I_1, I_2,......, I_C - thể hiện chỉ số của các thành phố quan trọng trong ngày thứ Q. Dữ liệu đầu vào đảm bảo trong C thành phố này, mọi thành phố đều đôi một không có xung đột với nhau

Output

  • Gồm Q+1 dòng:
  • Dòng thứ nhất gồm 1 số nguyên dương - số cặp thành phố (i, j) (1 \le i < j \le N) mà hiện tại không xảy ra xung đột với nhau
  • Q dòng tiếp theo gồm 1 số nguyên dương - độ dài đường đi dài nhất thỏa mãn các yêu cầu của ngày hôm đó.

Subtasks

  • Subtask 1 (8\% số điểm): N \le 1000, Q = 0.
  • Subtask 2 (23\% số điểm): N \le 100000, Q = 0.
  • Subtask 3 (18\% số điểm): N \le 100000, Q \le 31, với mọi d từ 1 đến Q: K_d \le 5.
  • Subtask 4 (13\% số điểm): N \le 100000, Q \le 31, với mọi d từ 1 đến Q: K_d \le 20.
  • Subtask 5 (18\% số điểm): N \le 100000, Q \le 31, với mọi d từ 1 đến Q: K_d \le 300.
  • Subtask 6 (20\% số điểm): N \le 1000000, Q \le 31, với mọi d từ 1 đến Q: K_d \le 300.

Example 1

Input

5
3 
1 0
2 2
3 5
2 1
3

Output

9
1
2
3

Giải thích

  • Có 9 cặp thành phố (i, j) thỏa mãn: (1,2), (1,3), (1,5), (2,3), (2,4), (2,5), (3,4), (3,5), (4,5).
  • Với K_1 = 1 và C_1 = 0, đường đi dài nhất thỏa mãn có độ dài 1: Chọn bất kì điểm nào làm điểm bắt đầu và kết thúc.
  • Với K_2 = 2 và 2 thành phố quan trọng là 3 và 5, đường đi dài nhất thỏa mãn là 3 \rightarrow 5 hoặc 5 \rightarrow 3.
  • Với K_3 = 2 và 1 thành phố quan trọng là 3, đường đi dài nhất có độ dài 3. 1 đường đi thỏa mãn như vậy là 4 \rightarrow 3 \rightarrow 1.

Example 2

Input

12
2
3 0
3 1
5

Output

61
7
6

Giải thích

  • Có 61 cặp thành phố (i, j) thỏa mãn: (tự bruteforce thử đi).
  • Độ dài đường đi tối đa thỏa mãn: 7. 1 đường đi thỏa mãn có độ dài 7: 2\rightarrow4\rightarrow8\rightarrow1\rightarrow3\rightarrow9\rightarrow12
  • Độ dài đường đi tối đa thỏa mãn: 6. 1 đường đi thỏa mãn có độ dài 6: 5\rightarrow9\rightarrow8\rightarrow1\rightarrow2\rightarrow4

TLEoj Contest #09 - Nhà cây

Lib

Tọa lạc tại vị trí vô cùng đắc địa, phòng 702 D4 trường THPT Chuyên Sư Phạm tự hào là hàng net lâu đời nhất nhì và chắc chắn là cao nhất đường Xuân Thủy - Nơi mà máy nào máy nấy đều có case máy đèn 7 màu, người người nhà nhà đều mang bàn phím custom đi, máy nào cũng có Steam, không thì Genshin hoặc Y8 browser. Ngày hôm nay, các thành viên K56 Tin gồm SpiceDangSpice, Lib, NotNaCl, Kubogi, Normankr07 đang tranh thủ ngồi chơi Minecraft trong lúc chờ thầy Hoàng setup server CSPOI (họ không biết rằng thầy đang setup 2 bài matching và 4 bài mincost flow).

Do đã quá chán nản với việc làm theo Geneva Suggestions và làm đủ các thứ trò con bò, họ đã quyết định: Thay vì tiếp tục mở rộng danh sách "tội ác chống lại loài người" của mình, hôm nay, họ sẽ làm thứ gì đó "Zen" hơn: Xây nhà. Tuy nhiên, do bản tính siêu sv đã ắn sâu vào trong máu, các thành viên lớp 11D6 không thể nào chịu được việc phải đặt các block xuống để xây nhà. Trong hoàn cảnh đó, Lib đã nghĩ ra 1 ý tưởng siêu thiên tài: Phá rừng để làm nhà (vẫn không phải Crimes Against Humanity nhé).

Sau khoảng 10 phút đi tìm 1 mảnh rừng chưa bị cháy thành tro, các thành viên lớp 11D6 đã tìm được 1 mảnh đất có kích thước M \times N block. Các hàng được đánh số từ 1 đến M, các cột được đánh số từ 1 đến N. Trong mảnh rừng này, ở ô [i][j] sẽ có giá trị là 0 nếu ở đó không có cây nào, ngược lại ô [i][j] sẽ có giá trị là 1. 1 ngôi nhà cần phải có dạng 1 hình vuông kích thước A \times A, với tất cả các ô ở trên cạnh đều phải có sẵn cây (để làm tường), và tất cả các ô không nằm trên cạnh của ngôi nhà đều phải không có cây nào. Dĩ nhiên, để tìm được 1 khu đất đủ to mà không chứa cây nào trong tự nhiên là rất khó, nên vẫn có thể chặt 1 số cây đi được. Tuy nhiên, do chỉ còn 3 ngày nữa là thi tuyển, và không ai muốn bị đánh giá là quá nghiện ngập, mải chơi không lo học bởi một Mrs REDACTED nào đó, tập thể sv lớp 11D6 chỉ được phép chặt tối đa không quá K cây.

Yêu cầu: Tính diện tích của ngôi nhà lớn nhất mà các thành viên lớp 11D6 có thể "xây" được thỏa mãn các yêu cầu của đề bài.

Input, Output and Subtasks

Input

  • Dòng 1 là 3 số nguyên dương M, N, K.
  • M dòng tiếp theo, mỗi dòng là N số chỉ trạng thái của ô [i][j].
  • Dữ liệu đề bài đảm bảo M, N\le 6000 trong mọi testcase.

Output

  • Gồm 1 số nguyên là diện tích của ngôi nhà lớn nhất tìm được.

Subtasks

  • Có 20\% số testcase có K=0
  • Có 30\% số testcase có K=1
  • 50\% testcase còn lại, K không có điều kiện gì thêm
    1) 40\% số điểm: M,N\le 300
    2) 30\% số điểm: M\times N\le 10^6
    3) 30\% số điểm: M\times N\le 5\times 10^6.

Example 1

Input

9 12 0
0 1 0 1 0 1 1 0 1 1 0 0 
1 1 1 1 1 0 0 0 0 1 1 0  
1 0 1 1 1 1 1 1 1 1 1 1 
1 1 0 1 0 1 0 0 0 1 0 1 
0 1 1 1 1 1 0 0 0 1 0 1 
1 0 1 0 0 1 0 0 0 1 1 0 
0 1 1 0 0 1 1 1 1 1 0 1 
1 1 0 1 1 1 0 0 1 1 1 0 
1 1 1 1 0 1 0 0 0 1 1 0 

Output

25

Example 2

Input

13 12 1
0 0 0 0 0 0 1 0 0 1 0 0 
0 0 0 1 0 1 1 1 0 0 1 0 
0 1 0 1 1 1 0 1 0 0 1 1 
1 0 1 1 1 1 1 0 1 0 1 1 
1 1 1 0 0 0 1 1 1 0 1 0 
0 1 1 0 0 0 1 0 1 0 0 1 
0 0 1 0 0 1 1 0 0 0 1 0 
1 1 1 1 1 1 1 1 0 1 0 0 
0 1 1 0 1 0 0 1 0 1 0 1 
0 0 0 0 0 0 0 0 0 0 0 0 
0 1 0 1 0 0 1 1 0 1 1 1 
0 0 0 0 1 1 0 0 0 0 0 0 
0 0 1 0 0 1 0 0 0 1 0 1 

Output

25

Example 3

Input

13 12 11
0 1 0 0 0 1 1 1 1 1 1 1 
1 0 0 1 0 1 1 1 0 0 1 1 
0 0 1 0 1 1 0 0 0 1 0 1 
0 1 1 0 1 1 0 1 1 0 0 1 
0 1 1 1 1 1 0 0 0 1 1 1 
1 1 1 1 1 1 1 0 1 0 1 1 
1 0 0 1 1 1 1 1 1 1 1 1 
1 1 0 1 0 0 1 0 1 0 0 1 
1 0 0 1 0 0 1 1 0 1 0 1 
1 0 1 0 1 1 1 0 1 1 1 1 
0 1 1 0 0 0 1 1 1 1 1 1 
1 0 1 0 1 1 0 0 1 1 1 1 
0 0 1 1 1 0 1 1 1 0 1 1 

Output

49

TLEoj Contest #09 - Trò con bò

Lib

"Ngành Tin Học bắt đầu du nhập về Việt Nam từ năm 1989. Năm đấy, bọn Hội đồng Khoa học Quốc Tế tổ chức IOI lần đầu tiên ở bên Bulgary. Thời đấy, bên mình còn chưa biết cái môn này là cái gì, học và dạy như thế nào, gồm những cái gì nên quyết định tham gia để thấy thế giới người ta học như thế nào thì bú nguyên cái đấy về Việt Nam dạy. Như các bạn bây giờ thì để được đi thi cái đấy đấm nhau hết hơi còn chưa xong, đấu qua mấy vòng rồi đủ các thể loại mới đi thi được, vì bây giờ thằng nào cũng muốn đi, nhưng năm ấy, cố gắng vật vã lắm mới cử được có 3 thằng đi - còn chưa đủ 4 đứa để thành 1 đội. Năm đấy mình đi thi trên tinh thần lớ ngớ chả biết cái gì cả, chỉ đi thi thử cho biết, thế mà chẳng hiểu kiểu gì lại được cái huy chương đồng để mang về. Thậm chí, cả mấy năm sau cũng thế - các năm sau còn nhiều huy chương hơn, thậm chí có cả huy chương vàng. Thực ra hồi đấy kết quả được như thế vì lúc đấy đi thi về cơ bản là "chửi nhau" và "code giấy": lãnh đạo đoàn bên mình đi tranh luận với BTC các thứ để chấm điểm. Đến năm 1994 thì IOI bắt đầu chấm bằng test, và thế là từ đấy kết quả của đoàn VN bắt đầu lẹt đẹt đi hẳn.
Quá trình chấm bài bằng test thì cũng phải mất mấy năm mới hoàn thiện được. Mấy năm đầu, mỗi test chỉ đứng riêng, nên có hiện tượng mấy thằng cắn bẩn, chả code gì còn được điểm cao hơn cả mấy thằng nghĩ ra thuật tử tế. Các bạn cứ thử tưởng tượng thế này: Có 1 bài gồm 10 test, mỗi test được 10 điểm, nhưng chỉ yêu cầu in ra 1 trong 4 số A,B,C,D làm đáp án. Thế là, có mấy thằng, chả cần nghĩ thuật gì, cứ in ra random(1,4) và thế là chẳng làm gì cũng được hơn 20 điểm. Tính toán ra thì tỉ lệ để đúng hết các test bài đấy mà chỉ in random ra tận 1/hơn 1 triệu gì gì đấy, nghĩa là bọn đấy nếu cứ cắm đầu cắm cổ nộp bừa thì trong contest, kiểu gì cũng có thằng AC mà không cần phải làm gì cả, mà thế thì rõ ràng là không tốt. Thế là, rút kinh nghiệm từ cái đấy, mấy năm tiếp theo người ta gộp tầm 10 test lại thành các "batch", và phải đúng hết các test trong 1 batch thì mới được điểm của batch đấy. Các bạn cứ tưởng tượng là, có 50 cái test, nếu để nó thành 50 test riêng, mấy thằng in random kia trung bình kiểu gì cũng đúng được đâu đấy tầm 15 test. Nhưng nếu gộp 10 cái test vào trong 1 batch, và yêu cầu phải đúng hết tất cả các test trong batch mới được điểm của batch đấy, thì mấy thằng cắn bẩn đấy chẳng có cơ hội làm gì cả."
(thực ra còn nhiều hơn nữa, nhưng do mình không ghi lại và chưa nhớ được hết nên chỉ có đến đây thôi)

  • Lê Minh Hoàng, trong bài "diễn văn" chào mừng học sinh khóa K56 Tin của trường Chuyên ĐHSP Hà Nội (Thứ 2, ngày 8/8/2022)

Sau hơn 30 năm du nhập về Việt Nam, môn Tin Học đã trở thành một môn học chính thống với mức độ cạnh tranh khá cao (cho bọn trường chuyên), với số lượng học sinh được giải trong các kì thi khu vực và quốc tế càng ngày càng tăng lên. Nhận thấy rằng chất lượng của học sinh trong nước (trong môn Tin Học lập trình) càng ngày càng cao, Bộ Giáo Dục, cùng với các trường chuyên trên khắp cả nước đã và đang có rất nhiều nỗ lực để đẩy mạnh công cuộc đào tạo các IOI medalist có thể cạnh tranh với các anh Tàu, Tàu (ở Mỹ), Tàu (Ở Canada), Tàu (ở Úc), Nhật, Hàn,.... trong tương lai. Với chủ trương "các em khóa sau phải giỏi x10 lần các anh chị tiền bối khóa trước lúc bằng tuổi", Sở Giáo Dục của các thành phố, cùng với hội đồng các trường chuyên trên khắp cả nước đã nghĩ ra những cách vô cùng hay ho để thách thức các em học sinh cấp 2 trên khắp cả nước. Điển hình như việc đề Tuyển Sinh vào 10 của Lê Quý Đôn (Đà Nẵng) tòi hẳn ra 1 bài FFT giải 10^5 đa thức có bậc 10^5 (literally kiến thức nâng cao trên Codeforces, 4* trên VNOI Wiki), hay đề thi HSGTP dành cho học sinh cấp 2 của Hà Nội có quả bài 5 bú nguyên xi 1 bài rating 3000 Codeforces (https://codeforces.com/problemset/problem/526/F) (3k codeforces = ngang ngửa đề thi IOI :wheeze: và từ đó sinh ra câu nói huyền thoại của ahihi1234: "Bài 3k codeforces đấy chỉ là sub 3 thôi con ạ") :wheeze: , hay việc câu C hình đề tuyển sinh vào 10 của 1 trường H nào đó (trong 1 đề thi 150p) khiến 1 nhóm 5 thầy nào đó mất 300 phút (với sự hỗ trợ của GeoGeBruh) để giải và khiến ngay cả đội IMO cũng phải bó tay, hay....... Việc đưa ra những task rất wtf và literally không ai giải nổi để thằng ra đề flex trình độ với bọn nhóc cấp 2 vắt mũi chưa sạch, mới chân ướt chân ráo vào CP xem ra khá được ưa chuộng

Ngoài việc liên tục pressing các em trong quá trình tuyển sinh, ngay cả sau khi đã vào trường rồi, các em vẫn còn lâu mới được yên. Bây giờ meta là học sinh lớp 8 phải hở mồm ra là Larange Interpolatation, FFT, cài mincost flow, matching, Presistent Segment Tree như con, biết extended Li-chao tree with Lazy Propagation, Gormon-Hu tree, Larange Relaxation, Link-Cut Tree, Segment Tree Beats, 3D Convex Hull, Splay Tree,....., AC Alien trong 1 nốt nhạc ầm ầm, còn nếu không được thì sẽ ngay lập tức trở thành nỗi thất vọng trong lòng thầy H nào đó (allegedly) và nếu học sinh học ké dự tuyển mà không được đi thi IOI từ lớp 10 thì cũng sẽ trở thành nỗi nhục của thầy H nào đó và bị chê là "không có gì nổi trội" (allegedly). Nghe đồn còn có trường nào đấy suốt ngày lôi paper của bọn tuyển bên China về dịch để dạy cho HS lớp 10, dù cuối cùng cũng chả biết khi nào mới dùng.

Năm nay, với tư cách là người ra đề cho kì thi Học sinh giỏi Quốc gia môn Tin Học cấp Tiểu học, bạn có nhiệm vụ phải ra 1 đề thi nhuận tràng nhất có thể cho tất cả các bên liên quan. Hiện tại, ban tổ chức đã chuẩn bị được N bài (với nguồn được bú trực tiếp, thay mỗi cái tên và taskname từ COCI, POI, IOI, APIO, IZhO, USACO Platinium , Codeforces (phải có độ khó trên 3k trở lên), CodeChef, VNOI, AtCoder, các thứ các kiểu), với độ khó lần lượt là A[1], A[2], ......, A[N]. Nhiệm vụ của bạn chỉ là sắp xếp lại các bài này để tạo thành một đề thi hoàn chỉnh.

Sau khi nhận được sự hưởng ứng "nồng nhiệt" từ các phụ huynh trên khắp cả nước, ban tổ chức đã quyết định tặng cho mỗi thí sinh 1 cỗ máy huyền bí để có thể hỗ trợ giải đề. Nguyên lí hoạt động của máy như sau:

  • Khi nhận đề thi, máy sẽ ngay lập tức giải bài đầu tiên trong đề thi. Giá trị máy nhận làm input là độ khó của bài đó.
  • Với mọi bài thứ i thỏa mãn 1<i\le N, độ khó mà máy sẽ gặp phải khi giải bài thứ i sẽ có giá trị là (giá trị đang ở trong máy) % (độ khó của bài thứ i). Input giá trị này vào trong máy để giải bài thứ i+1.
  • Độ khó của đề thi là giá trị ở trong máy sau khi đã giải hết tất cả N bài.

Như đã nói ở trên, vì muốn đào tạo ra, không phải 1, không phải 2, mà là 10^9 + 7 Tourist da vàng 9 tuổi, ban tổ chức muốn bạn đưa ra được 1 đề thi giúp mọi thí sinh được nhuận tràng và rửa ruột nhất có thể, BTC momg muốn đề thi có độ khó càng cao càng tốt. Do thời gian để chuẩn bị đề vô cùng có hạn, bạn chỉ cần xác định độ khó tối đa có thể của 1 đề thi.

Yêu cầu: Hãy xác định độ khó tối đa của 1 đề thi gồm N bài đã cho trước.

Input, Output và Scoring

Input (bàn phím)
  • Dòng đầu tiên gồm 1 số N - số bài tập đã có sẵn.
  • Dòng thứ 2 gồm N số nguyên, số nguyên thứ i là độ khó của bài tập thứ i trong đề thi mà bạn đưa ra.
Output (màn hình)

In ra 1 dòng:

  • Dòng đầu tiên gồm 1 số nguyên: độ khó tối đa của đề thi.
Subtasks
  • Với mọi i từ 1 tới N: A[i] \le 10^9
  • Subtask 1 (8% số điểm): N \le 5
  • Subtask 2 (14% số điểm): N \le 16, với mọi i: A[i] \le 60
  • Subtask 3 (18% số điểm): N \le 1000
  • Subtask 4 (33% số điểm): N \le 100000
  • Subtask 5 (27% số điểm): N \le 1000000

Sample

Input (bàn phím)
5
8 5 3 7 3
Output (màn hình)
2

TLEoj Contest #08 - Trò chơi với đá

nathan4690

Ở thành phố XYZ, ai ai cũng đều biết tới nathan4690 với khả năng "chơi đá" thần sầu của anh khiến tất cả đều ngưỡng mộ. Tuy nhiên, riêng chỉ có bạn là không tin tưởng vào tài năng đó của nathan4690, vì vậy cậu ấy quyết định sẽ thách đấu bạn bằng một trò chơi nho nhỏ.

Trò chơi được thực hiện trên một sân đấu được chia thành 10^6 vị trí được đánh số từ 1 đến 10^6. nathan4690 có một số viên đá, cậu ấy xếp chúng vào n vị trí từ 1 đến n, vị trí thứ i có a_i viên đá. Bạn được thực hiện không quá 10^6 thao tác sau:

  • Chọn 3 vị trí i,j,k phân biệt có giá trị không quá 10^6 sao cho vị trí i và j chứa ít nhất một viên đá.
  • Lấy hai viên đá từ hai vị trí thứ i, j, mỗi vị trí một viên đá, rồi chuyển chúng sang vị trí thứ k.

Mục tiêu của trò chơi là chuyển hết tất cả các viên đá về một vị trí duy nhất (vị trí kết thúc không quan trọng). nathan4690 đã dễ dàng dành chiến thắng trong trò chơi này, thậm chí không cần dùng đến các vị trí lớn hơn ns, còn bạn?

Input, Output và Subtasks

Input
  • Dòng đầu tiên chứa số nguyên dương n là số lượng vị trí được đặt đá (4 \leq n \leq 10^5)

  • Dòng thứ hai chứa n số nguyên dương a_1, a_2, \ldots, a_n tương ứng là số viên đá ở vị trí thứ 1,2,\ldots,n (1 \leq a_i \leq 10^5)

Dữ liệu đảm bảo a_1 + a_2 + \ldots + a_n \leq 2 \times 10^5

Output
  • Dòng đầu tiên cần chứa số nguyên không âm c là số lượng thao tác bạn sẽ thực hiện (0 \leq c \leq 10^6). Lưu ý rằng bạn không cần tối thiểu hóa số thao tác bạn thực hiện.

  • c dòng tiếp theo, mỗi dòng cần chứa 3 số nguyên dương phân biệt i,j,k là các vị trí bạn sẽ thực hiện thao tác (1 \leq i,j,k \leq 10^6)

  • Nếu bạn không thể dành chiến thắng trong trò chơi của nathan4690, in ra một dòng duy nhất chứa số -1

Subtasks
  • Subtask 1 (20\% số điểm): a_i \leq 2 với mọi i

  • Subtask 2 (80\% số điểm): Không có ràng buộc gì thêm.

Với mỗi test:

  • Bạn sẽ được tính 25\% số điểm của test đó nếu bạn sử dụng không quá 10^6 vị trí.
  • Bạn sẽ được tính 100\% số điểm của test đó nếu bạn sử dụng không quá n vị trí.

Sample

Sample Input
4
1 2 3 1
Sample output
2
1 2 3
2 4 3
Note
  • Ban đầu, số lượng đá ở từng chồng là: 1,2,3,1
  • Ở bước 1, bạn chuyển 1 viên từ chồng 1 và 1 viên từ chồng 2 sang chồng thứ 3. Số lượng đá ở từng chồng lúc này là: 0,1, 5,1
  • Ở bước 2, bạn chuyển 1 viên từ chồng 2 và 1 viên từ chồng 4 sang chồng thứ 3. Số lượng đá ở từng chồng lúc này là: 0,0, 7,0
  • Bạn giành chiến thắng trò chơi vì đã đưa hết các viên đá vào chồng thứ 3. Bạn được 100\% số điểm của test vì không dùng tới bất kỳ vị trí nào lớn hơn 4.

TLEoj Contest #08 - Vị trí max min

nathan4690

Định nghĩa một dãy hoán vị độ dài n là một dãy số độ dài n chứa tất cả các số nguyên dương bé hơn hoặc bằng n theo một thứ tự bất kỳ. Ví dụ, [2,3,1,5,4] là một dãy hoán vị, nhưng [1,2,2] và [1,3,4] không phải dãy hoán vị.

Bạn được cho một dãy hoán vị a độ dài n. Với mỗi i từ 1,2,\ldots,n-1, theo thứ tự này, bạn thực hiện thao tác sau:

  • Khởi tạo một dãy b gồm n-1 phần tử theo định nghĩa sau:
    • Nếu i lẻ: b_j = max(a_j, a_{j+1}) với mọi j \in [1,n-1]
    • Nếu i chẵn: b_j = min(a_j, a_{j+1}) với mọi j \in [1,n-1]
  • Đặt dãy a thành dãy b

Dễ thấy, sau mỗi thao tác, độ dài dãy a giảm đi đúng 1 phần tử, và sau n-1 thao tác, dãy a sẽ chỉ còn đúng một phần tử.

Yêu cầu: Hãy tìm phần tử cuối cùng còn lại trong dãy a sau n-1 thao tác.

Input, Output và Scoring

Input (bàn phím)
  • Dòng đầu tiên chứa số nguyên dương t là số lượng bộ test (1 \leq t \leq 100). Mỗi bộ test có định dạng như sau:
  • Dòng đầu tiên chứa số nguyên dương n là độ dài của dãy hoán vị (1 \leq n \leq 5000).
  • Dòng thứ hai chứa n số nguyên dương a_1,a_2,\ldots,a_n là dãy hoán vị được cung cấp (1 \leq a_i \leq n).
Output (màn hình)
  • In ra t dòng, mỗi dòng chứa một số nguyên dương duy nhất là phần tử cuối cùng còn lại trong dãy a tương ứng với từng bộ test.
Subtasks
  • Subtask 1 (20\% số điểm): n \leq 500
  • Subtask 2 (20\% số điểm): a_i \leq a_{i+1} với mọi i \in [1,n-1]
  • Subtask 3 (60\% số điểm): Không có ràng buộc gì thêm

Sample

Input (bàn phím)
2
3
1 3 2
4
1 2 3 4
Output (màn hình)
3
3
Notes

Ở test đầu tiên, các thao tác được thực hiện như sau:

  • Thao tác 1: ta có b_1 = max(a_1,a_2) = 3; b_2 = max(a_2,a_3) = 3. Dãy a sau thao tác này trở thành [3,3]
  • Thao tác 2: ta có b_1 = min(a_1,a_2) = 3. Dãy a sau thao tác này trở thành [3]

Phần tử cuối cùng trong dãy a là 3. Lưu ý rằng dãy a không nhất thiết là một hoán vị sau mỗi thao tác.