LQDOJ Contest #15 - Tạm biệt năm Giáp Thìn & Tạm Biệt Shiba

Bộ đề bài

1. LQDOJ Contest #15 - Bài 1 - Gói bánh chưng

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Vào dịp Tết Nguyên Đán, làng LQDOJ tổ chức cuộc thi gói bánh chưng truyền thống hàng năm. Trong kho của làng chỉ có đúng \(M\) nắm gạo nếp, được chuẩn bị kỹ lưỡng để chia cho những người tham gia gói bánh.

Mỗi gia đình sẽ lần lượt tham gia từ gia đình thứ \(1\), gia đình thứ \(2\), và lần lượt cho đến hết. Khi tham gia mỗi gia đình sẽ cần một số lượng gạo khác nhau tùy vào kế hoạch gói bánh của họ. Cụ thể, gia đình thứ \(i\) cần \(a_i\) nắm gạo nếp có thể gói bánh chưng. Mỗi gia đình chỉ được phép gói bánh nếu họ nhận đủ số nắm gạo mà họ cần.

Yêu cầu: Bạn hãy xác định xem có bao nhiêu gia đình có thể nhận đủ số nắm gạo để có thể gói bánh chưng theo trước khi gạo nếp cạn kiệt. Biết rằng nếu số gạo còn lại không đủ cho một gia đình, họ sẽ nhận số gạo còn lại nhưng không thể gói thành bánh chưng.

Input

  • Dòng đầu tiên chứa hai số nguyên dương lần lượt là \(N\)\(M\) \((1 \le N\le 10^5,1 \le M \le 10^8)\).
  • Dòng tiếp theo chứa \(N\) số nguyên dương cách nhau một khoảng trắng lần lượt là \(a_1,a_2,...,a_N\) \((1 \le a_i \le 10^5).\)

Output

  • In ra kết quả bài toán sau khi thực hiện yêu cầu đề bài.

Example

Test 1

Input
5 10
2 5 2 3 3
Output
3
Note
  • Gia đình thứ \(1\) cần \(2\) nắm gạo, số nắm gạo còn lại là \(10-2 = 8\).
  • Gia đình thứ \(2\) cần \(5\) nắm gạo, số nắm gạo còn lại là \(8 - 5 = 3\).
  • Gia đình thứ \(3\) cần \(2\) nắm gạo, số nắm gạo còn lại là \(3 - 2 = 1\).
  • Gia đình thứ \(4\) cần \(3\) nắm gạo, nhưng làng chỉ còn \(1\) nắm gạo nên gia đình này nhận số nắm gạo còn lại nhưng không đủ để gói bánh chưng.
  • Gia đình thứ \(5\) không còn số gạo nào để nhận.
    Vậy có \(3\) gia đình có thể gói bánh chưng.

2. LQDOJ Contest #15 - Bài 2 - Bàn tiệc

Điểm: 100 (p) Thời gian: 2.5s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Tết lại sắp về, không khí rộn ràng đang lan tỏa khắp Việt Nam, gia đình bạn cũng bắt đầu tất bật chuẩn bị một bàn tiệc Tết thật đầy đặn để đón chào năm mới. Trên bàn, các món ăn được sắp xếp gọn gàng thành một bàn vuông có kích thước \(N \times N\). Mỗi ô trên bàn có ký hiệu là \(a_{ij}\), là số món ăn được bày tại ô ở vị trí hàng \(i\), cột \(j\). Mỗi ô trên bàn là một món ăn đặc trưng ngày Tết như bánh chưng, bánh tét, chả lụa, thịt kho tàu,...

Để bữa tiệc thêm phần thú vị, gia đình bạn đã nảy ra một ý tưởng độc đáo: Tìm một số nguyên dương \(M\) nhỏ nhất sao cho tất cả các mâm cỗ có kích thước \(M \times M\) (là một phần nhỏ của bàn tiệc \(N \times N\) nói trên) có tổng số món ăn trên mâm đạt ít nhất là \(K\). Biết rằng các mâm cỗ này có thể đặt ở bất kỳ đâu trên bàn, kể cả khi biên của mâm cỗ nằm trùng với biên của bàn.

Yêu cầu: Bạn hãy viết chương trình tính toán và tìm ra số nguyên dương \(M\) phù hợp nhất với đề bài.

Input

  • Dòng đầu tiên chứa hai số nguyên dương lần lượt là \(N\)\(K\) \((1 \le N \le 5000,1 \le K \le 2 \times 10^9)\).
  • Dòng tiếp theo chứa một bàn ăn chứa \(N \times N\) số nguyên \(a_{ij}\) \((0 \le a_{ij} \le 50)\).

Output

  • In ra kết quả bài toán sau khi thực hiện yêu cầu đề bài, nếu không tìm ra đáp án phù hợp thì in ra -1.

Scoring

  • Subtask \(1\) (\(10\%\) số điểm): Có \(N \le 20\).
  • Subtask \(2\) (\(10\%\) số điểm): Có \(N \le 100\).
  • Subtask \(3\) (\(20\%\) số điểm): Có \(N \le 500\).
  • Subtask \(4\) (\(30\%\) số điểm): Có \(N \le 2000\).
  • Subtask \(5\) (\(30\%\) số điểm): Không có ràng buộc gì thêm.

Example

Test 1

Input
4 15
2 3 5 8
4 1 6 2
9 7 3 1
5 8 4 6
Output
3
Note
  • Với \(M = 1\) thì không có ô nào thỏa mãn hết.
  • Với \(M = 2\) thì ta có ô
    2 3
    4 1
    Không thỏa mãn vì \(2+3+4+1 = 10 < 15\).
    +--+
    |2 3| 5 8
    |4 1|
    +--+ 6 2
    9 7 3 1
    5 8 4 6

  • Với \(M = 3\) thì tất cả các mâm cỗ có kích thước \(3 \times 3\) đều có tổng lớn hơn hoặc bằng \(15\) nên \(3\) là đáp án bài toán.

3. LQDOJ Contest #15 - Bài 3 - Gian hàng bánh chưng

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Ở một ngôi làng LQDOJ nổi tiếng với truyền thống gói bánh chưng ngày Tết, shiba – một người bán bánh chưng có tiếng đang chuẩn bị mở hai gian hàng tại chợ Tết. Anh sẽ thu mua \(N\) gói bánh chưng từ \(N\) gia đình trong làng để đi bán.

Gia đình thứ \(i\) \((1 \le i \le N)\) sẽ bán đúng \(a_i\) chiếc bánh chưng trong gói của mình với giá tổng cộng là \(c_i\). shiba sẽ mua toàn bộ các gói bánh chưng này của các gia đình và phân chia chúng vào hai gian hàng.

shiba ký hiệu giá bánh chưng trung bình ở gian hàng thứ nhất là \(X_1\) và giá bánh chưng trung bình ở gian hàng thứ hai là \(X_2\). Giá bánh chưng trung bình ở một gian hàng được tính bằng tỷ lệ giữa tổng giá và tổng số lượng bánh chưng ở gian hàng đó (hay nói cách khác, \(X = \frac{Tổng \ \ giá}{Tổng \ \ số \ \ lượng \ \ bánh \ \ chưng}\)).

Để thuận lợi trong việc buôn bán ngày Tết và giữ giá cả hợp lý cho người dân, shiba muốn tích của \(X_1\)\(X_2\) là nhỏ nhất có thể. Hay nói cách khác, anh muốn tích của giá bánh chưng trung bình ở hai gian hàng là nhỏ nhất, và shiba muốn chia làm sao mà ít nhất một gian hàng phải có đúng \(M\) gói bánh chưng, không hơn không kém.

Yêu cầu: Bạn hãy giúp shiba phân chia \(N\) gói bánh chưng vào hai gian hàng sao cho tích của \(X_1\)\(X_2\) là nhỏ nhất có thể và có ít nhất một gian hàng phải có đúng \(M\) gói bánh chưng.

Input

  • Dòng đầu tiên chứa hai số nguyên dương lần lượt là \(N\)\(M\) \((2 \le N \le 100,1 \le M < N)\) là số gói bánh chưng và số gói bánh chưng tối thiểu phải có ở ít nhất một gian hàng.
  • Dòng tiếp theo chứa \(N\) số nguyên dương \(a_i\) \((1 \le a_i \le 100)\) là số bánh chưng có trong gói thứ \(i\), mỗi số cách nhau một khoảng trắng.
  • Dòng cuối cùng chứa \(N\) số nguyên dương \(c_i\) \((1 \le c_i \le 10^6)\) là giá của gói bánh chưng thứ \(i\), mỗi số cách nhau một khoảng trắng.
  • Dữ liệu vào luôn đảm bảo rằng \(a_1+a_2+...+a_N \le 500\).

Output

  • In ra kết quả bài toán sau khi thực hiện yêu cầu đề bài sau khi làm tròn đến chữ số thập phân thứ ba.

Scoring

  • Subtask \(1\) (\(30\%\) số điểm): Có \(N \le 20\).
  • Subtask \(2\) (\(70\%\) số điểm): Không có ràng buộc gì thêm.

Example

Test 1

Input
3 1
1 2 3
2 3 5
Output
2.625
Note

Đây là cách phân chia sao cho tích giá bánh chưng trung bình ở hai gian hàng là nhỏ nhất và thỏa mãn điều kiện có ít nhất một gian hàng có đúng \(1\) gói bánh chưng:

  • Gian hàng \(1\): Gói \(2\) \((a_2 = 2, c_2 = 3)\).
  • Gian hàng \(2\): Gói \(1\) và gói \(3\) \((a_1 = 1,c_1 = 2;a_3 = 3,c3 = 5)\).
    • \(X_1 = \frac{3}{2} = 1.5\).
    • \(X_2 = \frac{2+5}{1+3} = \frac{7}{4} = 1.75\).
    • Tích giá bánh chưng ở hai gian hàng là: \(X_1 \times X_2 = 1.5 \times 1.75 = 2.625\) và gian hàng thứ \(1\) có đúng \(1\) gói bánh chưng.

4. LQDOJ Contest #15 - Bài 4 - Bao lì xì

Điểm: 100 (p) Thời gian: 2.0s Bộ nhớ: 1G Input: bàn phím Output: màn hình

Trong không khí rộn ràng của ngày Tết, shiba ngồi bên hiên nhà, ngắm nhìn những cành mai vàng khoe sắc và những phong bao lì xì đỏ rực. Anh vừa nhận được một túi hoa mai vàng cùng \(N\) bao lì xì từ mẹ, mỗi bao lì xì đều ghi một con số may mắn.

Mỗi bao lì xì được ghi một con số may mắn \(a_i\). shiba chợt nghĩ ra một trò chơi thú vị. Cậu có thể buộc hai bao lì xì \(x\)\(y\) với nhau, sau đó phải tặng hoa mai cho mẹ với số lượng tối thiểu là \(min(a_x \ \ mod \ \ a_y,a_y \ \ mod \ \ a_x)\).

shiba muốn buộc các bao lì xì lại sao cho khi nhấc một bao lì xì lên, toàn bộ các bao lì xì khác cũng được nhấc lên cùng. Mỗi bao lì xì có thể được kết nối với bất kỳ số lượng bao lì xì nào khác. Tuy nhiên, vì số lượng hoa mai của shiba có hạn, cậu nhờ bạn tính toán số lượng hoa mai ít nhất cần tặng để kết nối tất cả các bao lì xì.

Yêu cầu: Bạn hãy viết chương trình tính ra số lượng hoa mai ít nhất shiba cần tặng để có thể kết nối tất cả các bao lì xì.

Input

  • Dòng đầu tiên chứa số nguyên dương \(N\) \((1 \le N \le 10^5)\).
  • \(N\) dòng tiếp theo mỗi dòng chứa một số nguyên dương \(a_i\) \((1 \le a_i \le 10^7)\).

Output

  • In ra kết quả bài toán sau khi thực hiện yêu cầu đề bài.

Scoring

  • Subtask \(1\) (\(30\%\) số điểm): Có \(N \le 1000\).
  • Subtask \(2\) (\(70\%\) số điểm): Không có ràng buộc gì thêm.

Example

Test 1

Input
3
4 
9 
15
Output
4

5. LQDOJ Contest #15 - Bài 5 - Cây Phúc Lộc Thọ

Điểm: 100 (p) Thời gian: 2.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Trong dịp Tết Nguyên Đán, làng LQDOJ được trang hoàng bởi một cây Phúc Lộc Thọ đặc biệt, được kết nối bởi các nhánh tượng trưng cho các khía cạnh may mắn trong năm mới. Cây này có \(n\) đỉnh và \(n-1\) cạnh, mỗi cạnh \((u_1,v_1)\) có độ dài \(w_1\), \((u_2,v_2)\) có độ dài \(w_2\),,..., \((u_{n-1},v_{n-1})\) có độ dài \(w_{n-1}\), đại diện cho sự liên kết giữa các yếu tố Phúc, Lộc, và Thọ.

shiba được giao nhiệm vụ quản lý cây Phúc Lộc Thọ này trong suốt mùa Tết, thực hiện \(q\) thao tác với \(2\) truy vấn sau:

  • 1 x k n_1,n_2,...,n_k: Tìm độ dài của đường đi dài nhất từ đỉnh \(x\) đến một đỉnh \(y\) sao cho đường đi này không đi qua bất kỳ đỉnh nào trong tập \({n_1, n_2,...,n_k}\) (các đỉnh bị cấm vì có điều không may trong năm mới).
  • 2 i w: Thay đổi độ dài của cạnh thứ \(i\) \((u_i,v_i)\) thành \(w\).

Tuy nhiên khối lượng công việc của shiba quá lớn, không thể thực hiện hết được. Bạn hãy giúp shiba bằng cách viết chương trình thực hiện các thao tác đó cho shiba, rồi Flower_On_Stone sẽ lì xì cho bạn :Đ

Yêu cầu: Bạn hãy viết chương trình thực hiện các truy vấn trên.

Input

  • Dòng đầu tiên chứa số nguyên dương \(n\) \((1 \le n \le 2 \times 10^5)\).
  • \(n-1\) dòng tiếp theo, mỗi dòng chứa ba số nguyên \(u_i,v_i,w_i\). \((1 \le u_i,v_i \le n, 1 \le w_i \le 10^9)\).
  • Dòng tiếp theo chứa số nguyên dương \(q\) \((1 \le q \le 2 \times 10^5)\).
  • \(q\) dòng tiếp theo, mỗi dòng chứa một truy vấn thuộc loại 1 hoặc loại 2 như đã mô tả ở trên:
    • Trong truy vấn loại 1, dữ kiện đề bài luôn đảm bảo rằng \(n_i \neq x\) với mọi \(1 \le i \le k\)\(n_i \neq n_j\) với mọi \(1 \le i < j \le k\).
    • Tổng của tất cả các \(k\) trong các truy vấn loại 1 không vượt quá \(2 \times 10^5\).

Output

  • Với mỗi truy vấn loại 1, in ra độ dài của đường đi dài nhất tìm được theo yêu cầu.

Scoring

  • Subtask \(1\) (\(20\%\) số điểm): Có \(n,q \le 5000\).
  • Subtask \(2\) (\(20\%\) số điểm): Mỗi đỉnh có bậc tối đa là bậc \(2\).
  • Subtask \(3\) (\(20\%\) số điểm): Có \(k = 0\) với tất cả các truy vấn loại 1.
  • Subtask \(4\) (\(20\%\) số điểm): Không có truy vấn loại 2.
  • Subtask \(5\) (\(20\%\) số điểm): Không có ràng buộc gì thêm.

Example

Test 1

Input
6
1 2 3
1 3 2
2 4 4
2 5 5
3 6 1
5
1 1 0
1 2 1 4
2 3 10
1 1 1 3
1 3 0
Output
8
6
13
15

6. LQDOJ Contest #15 - Bài 6 - Nhiều Đường Đi Nhất

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

shiba, một thanh niên hướng nội đã cùng với crush của mình có một buổi đêm giao thừa đầy vui vẻ trong thành phố LQDOJ. Thành phố LQDOJ là một thành phố rộng lớn, có \(N\) giao lộ được đánh số từ \(1\) đến \(N\) và có \(M\) con đường được đánh số từ \(1\) đến \(M\). Mỗi con đường nối liền một cặp giao lộ khác nhau, và không có cặp giao lộ nào được kết nối bởi nhiều hơn một con đường. Từ bất kỳ giao lộ nào, shiba và crush của mình đều có thể đi đến bất kỳ giao lộ khác thông qua các con đường đã cho.

shiba và crush của mình đã cùng nhau khám phá từng ngõ ngách trong thành phố. Tuy nhiên, shiba đã lỡ làm đổ cây kem vào áo của crush khi đang ăn dở cây kem của mình. Điều đó làm crush của shiba giận và bỏ đi trong sự hoảng hốt của shiba. shiba muốn đi tìm crush của mình nhưng anh ấy lại không biết hiện tại cô ấy đang ở đâu, tuy nhiên anh ấy nhận ra rằng mình cùng với cô ấy chắc chắn đã đi qua mọi ngóc ngách trong thành phố, điều này có nghĩa là shiba cùng crush của mình đã đi qua tất cả \(M\) con đường ít nhất một lần, nên shiba chắc chắn rằng crush của mình phải ở đâu đó trong \(M\) con đường ấy.

May mắn thay, shiba có dẫn theo chú chó _minhduc theo trong suốt đêm ấy. Và chú chó ấy có khả năng ghi nhớ rằng con đường thứ \(i\) nối giữa giao lộ \(a_i\)\(b_i\) đã được đi qua tại thời điểm \(c_i\) (và chú chó ấy có khả năng đánh hơi crush của anh ấy rất tốt). Tuy nhiên khả năng ghi nhớ của _minhduc lại bị rối loạn khiến thứ tự các con đường mà nó đã đi qua được ghi nhớ lại một cách hỗn loạn và đôi khi không đúng logic. Ví dụ, _minhduc nhớ là đã đi qua một con đường tại thời điểm \(10\), nhưng chú chó ấy lại không nhớ mình đã đi qua con đường nào ở thời điểm \(9\).

Người ta có câu "chủ nào, chó nấy". shiba cũng bị trường hợp giống như chú chó của mình 🤡

Tuy trí nhớ rối loạn nhưng shiba là một người thông minh, anh ấy nghĩ ra một kế sách là đi lại từ đầu để nhớ lại hành trình đêm qua mình đã đi những đâu và nhờ _minhduc đánh hơi để tìm crush. shiba bắt đầu cuộc hành trình của mình ở giao lộ \(1\). Vì không muốn lạc đường, shiba sẽ đi qua các con đường theo thứ tự mà thời điểm của con đường tiếp theo phải lớn hơn thời điểm của con đường trước đó (theo trí nhớ của _minhduc). Nói cách khác, nếu shiba đang đi qua một con đường có thời điểm \(c_{current}\), thì thì con đường tiếp theo anh chọn phải có thời điểm \(c_{next} > c_{current}\). Lưu ý rằng anh có thể đi qua một giao lộ nhiều lần.

shiba cần chuyến đi tìm kiếm crush này sẽ có nhiều con đường càng tốt, điều đó giúp tăng tỉ lệ tìm thấy crush của mình hơn nhờ vào việc _minhduc có thể đánh hơi được nhiều hơn. Do đó shiba cần biết số lượng con đường lớn nhất đến từng giao lộ tuân theo quy tắc được nêu trên. Nhưng việc tính toán quá phức tạp, không thể tính nhẩm. Và shiba cũng không mang laptop hay máy tính theo để tính toán số lượng con đường lớn nhất mà anh ấy có thể đi qua từ giao lộ \(1\) tới từng giao lộ khác. Với tư cách là một người có tài năng về code, Bạn hãy giúp shiba giải quyết bài toán trên.

Input

  • Dòng đầu tiên chứa hai số nguyên dương lần lượt là \(N\)\(M\) \((2 \le N \le 10^5,1 \le M \le 10^6)\).
  • \(M\) dòng tiếp theo, mỗi dòng chứa ba số nguyên dương lần lượt là \(a_i\), \(b_i\), \(c_i\) \((1 \le a_i,b_i \le N, 1 \le c_i \le 10^9)\).
  • Dữ liệu vào luôn đảm bảo rằng \(a_i \neq b_i\) với mọi \(i\).

Output

  • In ra \(N\) số nguyên, mỗi số cách nhau một khoảng trắng gồm số con đường lớn nhất mà anh ấy có thể đi qua từ giao lộ \(1\) tới từng giao lộ khác. Nếu không thể đi đến một giao lộ nào đó thì in ra \(0\) để biểu thị rằng không có đường đi nào khả thi đến giao lộ đó.

Scoring

  • Subtask \(1\) (\(20\%\) số điểm): Có \(N \le 10\)\(M \le 15\).
  • Subtask \(2\) (\(20\%\) số điểm): Có \(N \le 10^5\)\(M = N - 1\).
  • Subtask \(3\) (\(20\%\) số điểm): Có \(N \le 10^3\)\(M \le 10^4\).
  • Subtask \(4\) (\(10\%\) số điểm): Có \(N \le 10^5\)\(M \le 3 \times 10^5\)\(c_i \neq c_j\) với mọi \(i \neq j\).
  • Subtask \(5\) (\(10\%\) số điểm): Có \(N \le 10^5\)\(M \le 3 \times 10^5\).
  • Subtask \(6\) (\(10\%\) số điểm): Có \(N \le 10^5\)\(M \le 10^6\)\(c_i \neq c_j\) với mọi \(i \neq j\).
  • Subtask \(7\) (\(10\%\) số điểm): Không có ràng buộc gì thêm

Example

Test 1

Input
8 12
1 4 9
1 6 4
1 5 1
3 4 11
3 5 10
5 6 2
6 2 6
2 8 7
5 8 8
7 8 5
5 7 14
3 7 12
Output
3 3 6 7 8 2 7 4
Note
  • Đây là ví dụ minh họa về giao lộ và các đường phố:
  • Đây là ví dụ hành trình tối ưu theo quy tắc thời điểm trên đề bài để đến giao lộ \(3\), đi qua nhiều con đường nhất: \(1\overset{1}{-}5\overset{2}{-}6\overset{6}{-}2\overset{7}{-}8\overset{8}{-}5\overset{10}{-}3.\)
  • Lưu ý rằng khi đi ở giao lộ số \(8\) ta không thể tiếp tục đi qua giao lộ số \(7\) vì thời điểm của đường đó là \(5\) nhưng shiba đã đến từ đường giao lộ số \(8\) từ thời điểm \(7\).