Điều hướng chính

Ngôn ngữ

Phím tắt

/
Chuyển đến ô tìm bài
g p
Đi đến bài tập
g c
Đi đến kỳ thi
g u
Đi đến người dùng
?
Mở trợ giúp phím tắt

Bài tập

Bài được chọn theo nhịp luyện tập của bạn, cùng mọi bài mới vừa lên.

root

Xếp hộp

100 điểm

Bé Na có một dãy gồm \(N\) hộp xếp thành hàng ngang, trong đó hộp thứ \(i\) chứa \(A_i\) viên bi (\(0 \leq A_i \leq N\)).

Na thích những dãy hộp mà số bi trong các hộp tăng dần từ trái sang phải. Vì vậy, Na định nghĩa một chỉ số gọi là "độ rối" của dãy hộp: đó là số cặp \((i,j)\) sao cho \(i < j\) nhưng \(A_i > A_j\).

Bây giờ, Na thử một trò chơi: với mỗi giá trị \(j = 0,1,2,\dots,N-1\), Na sẽ giới hạn lại số bi trong các hộp. Cụ thể, những hộp nào đang có nhiều hơn \(j\) viên bi sẽ được giảm xuống còn đúng \(j\) viên. Sau đó, Na muốn biết độ rối của dãy hộp khi áp dụng quy tắc trên.

Với mỗi \(j = 0,1,\dots,N-1\), hãy tính và in ra độ rối của dãy hộp sau khi áp dụng thao tác giới hạn với giá trị \(j\)

Input

  • Dòng đầu tiên chứa số nguyên \(N\) (\(1 \leq N \leq 10^5\)).
  • Dòng thứ hai chứa \(N\) số nguyên \(A_1, A_2, \dots, A_N\) (\(0 \leq A_i \leq N\)).

Output

  • In ra \(N\) dòng, dòng thứ \(j+1\) chứa độ rối của dãy khi sử dụng giá trị \(j\).

Example

Test 1

Input
5
5 2 3 3 0
Output
0
4
4
5
7

Scoring

  • Có \(30\%\) số điểm thỏa mãn \(N \leq 100\).
  • Có \(30\%\) số điểm thỏa mãn \(N \leq 5000\).
  • Có \(40\%\) số điểm không có ràng buộc gì thêm.

root

Chia đường

100 điểm

Tại vương quốc Verde, nổi tiếng với hệ thống giao thông xanh và thông minh, có \(N\) khu vực canh tác được kết nối bằng \(N - 1\) con đường hai chiều. Cấu trúc giao thông hiện tại tạo thành một mạng lưới cây -- tức là luôn tồn tại đúng một đường đi giữa hai khu vực bất kỳ.

Tuy nhiên, sau nhiều năm quản lý và tối ưu hoá mạng lưới, nhà nghiên cứu giao thông trưởng của vương quốc -- ông Hiroshi -- nhận ra rằng hệ thống cây đang dần trở nên phức tạp, khó bảo trì, và không còn hiệu quả trong việc vận hành.

Vì thế, Hiroshi quyết định chia toàn bộ hệ thống con đường thành nhiều đoạn đường liên tiếp, mỗi đoạn là một đường đi ngắn nhất giữa \(2\) đỉnh bất kì. Lưu ý, mỗi con đường trong \(N-1\) con đường thuộc đúng chính xác một đường đi. Mục tiêu của Hiroshi là đảm bảo rằng tất cả các đoạn đường đều có độ dài ít nhất là \(K\), để những người giám sát đoạn đường này không lười biếng và buộc phải làm việc với các đoạn đủ dài.

Hãy giúp Hiroshi tìm giá trị lớn nhất của số nguyên dương \(K\) sao cho có thể chia toàn bộ hệ thống con đường thành một số đoạn mà mỗi đoạn đều có độ dài ít nhất là \(K\).

Input

Dòng đầu tiên chứa số nguyên \(N\) \((2 \le N \le 10^5)\) --- số lượng khu vực.

Mỗi dòng trong \(N - 1\) dòng tiếp theo chứa hai số nguyên \(u\) và \(v\) \((1 \le u, v \le N)\) --- biểu thị có một con đường nối giữa khu vực \(u\) và \(v\).

Output

In ra một số nguyên duy nhất --- độ dài lớn nhất \(K\) thỏa mãn yêu cầu.

Example

Test 1

Input
8
1 2
1 3
1 4
4 5
1 6
6 7
7 8
Output
3

Scoring

  • Subtask 1 (20 điểm): \(N \le 100\)
  • Subtask 2 (80 điểm): Không có ràng buộc gì thêm.

root

In hình chữ nhật rỗng 5x7

100 điểm

In ra hình chữ nhật kích thước \(5 \times 7\) gồm dấu *, nhưng bên trong rỗng. (hình chữ nhật có chiều dài là 7 và chiều rộng là 5)

*******

*     *
*     *
*     *
*******

Input

Không có dữ liệu đầu vào.

Output

Hình chữ nhật rỗng 5x7.

Example

Test 1

Input
Nothing
Output
*******

*     *
*     *
*     *
*******

root

Mật khẩu

100 điểm

An tạo cho mình một mật khẩu bằng cách sinh ra một dãy \(S\) gồm các chữ cái Latin in thường viết liền nhau. Sau đó bạn thực hiện các bước sau:

  • Sắp xếp các chữ cái trong mật khẩu theo thứ tự từ điển;
  • Trong dãy ký tự đã sắp, An tạo ra một dãy mới \(T\) bằng cách chỉ giữ lại số lượng chữ cái tương ứng với thứ tự của nó trong bảng chữ cái:

  • Nếu có nhiều hơn một chữ cái 'a' thì chỉ giữ lại một;

  • Nếu có nhiều hơn hai chữ cái 'b' thì chỉ giữ lại hai, ngược lại thì giữ nguyên;
  • Nếu có nhiều hơn ba chữ cái 'c' thì chỉ giữ lại ba, ngược lại thì giữ nguyên;
  • ...
  • Nếu có nhiều hơn 26 chữ cái 'z' thì chỉ giữ lại 26, ngược lại thì giữ nguyên.

  • Ghép dãy \(T\) vào sau dãy \(S\) và ghi dãy thu được vào tệp đầu ra.

Sau một thời gian, An không thể tìm ra mật khẩu S của mình nữa.

Yêu cầu: Từ dãy chữ cái đã ghi trong sổ tay của An, hãy giúp An tìm lại mật khẩu (S).

Input

Đọc từ tệp CAU3.INP gồm:

  • Dòng đầu tiên chứa số nguyên \(n\) \((2 \leq n \leq 5 \times 10^5)\), là số ký tự của dãy chữ cái trong sổ tay của An;
  • Dòng thứ hai chứa dãy chữ cái hợp lệ độ dài \(n\).

Output

Ghi vào tệp CAU3.OUT gồm :

  • Một dòng ghi dãy chữ cái Latin in thường là mật khẩu \((S)\) tìm được.

Example

Test 1

Input
19
abbracadabraabbcdrr
Output
abbracadabra
Note

Ví dụ 1: Dãy ký tự tương ứng với mật khẩu abbracadabra sau khi sắp xếp theo từ điển trở thành aaaaabbbbccddrr. Do 'a' có nhiều hơn một mục nên chỉ giữ lại một, 'b' có nhiều hơn hai nên giữ lại hai, ..., do đó thu được dãy abbracadabra.

Ví dụ 2: Vì dãy chỉ chứa chữ 'd' với số lượng lớn hơn bảy, ta chỉ giữ lại bảy chữ 'd'.

Test 2

Input
10
dddddddddd
Output
dddddd

Scoring

  • 20% số điểm: mật khẩu chỉ gồm chữ cái 'a';
  • 40% số điểm: mật khẩu chỉ gồm các chữ cái giống nhau;
  • 40% số điểm còn lại không có ràng buộc gì thêm.
Xem thêm