Đ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

Hành trình leo núi

100 điểm

Hoành Sơn là một địa điểm du lịch nổi tiếng trên toàn thế giới bởi sự hùng vĩ cũng như sự đa dạng phong phú về các dãy núi và những cây cầu bắc qua. Địa điểm du lịch Hoành Sơn có các dịch vụ tham quan theo yêu cầu. Cụ thể là bạn chỉ việc đưa ra yêu cầu lộ trình, sau đó dịch vụ sẽ tính toán và đưa bạn đi qua các cây cầu và ngọn núi theo đúng yêu cầu về lộ trình.

Địa điểm du lịch ở đây có \(N\) ngọn núi và \(M\) cây cầu, mỗi cây cầu nối hai ngọn núi nào đó với nhau. Giữa hai ngọn núi bất kì có thể có nhiều cây cầu nối hai ngọn núi đó với nhau. Cũng có thể có những ngọn núi có những cây cầu tự nối với chính nó tạo ra hình vòng cung để những khách du lịch có thể đứng xung quanh ngọn núi tham quan và chụp ảnh. Hiểu đơn giản thì mô hình của khu du lịch là một đa đồ thị vô hướng \(N\) đỉnh \(M\) cạnh.

Các ngọn núi được đánh số từ 1 đến \(N\) và ngọn núi thứ \(i\) có độ cao là \(A_i\). Về độ dốc của các cây cầu thì nó được tính theo chênh lệch chiều cao của hai ngọn núi ở hai đầu cây cầu. Nói cách khác, nếu cây cầu nối hai ngọn núi \(x\) và \(y\) thì độ dốc của nó là \(|A_x - A_y|\).

Sau khi đạt giải quốc gia, Tuấn muốn tự thưởng cho mình chuyến du lịch đến Hoành Sơn sau cả năm trời ôn luyện vất vả và chuẩn bị bước vào đại học. Đến Hoành Sơn, Tuấn muốn thiết kế một hành trình "lên đỉnh siêu dốc", xuất phát từ một ngọn núi nào đó, đi đến các ngọn núi khác với điều kiện ngọn núi sau cao hơn ngọn núi trước, không những thế, độ dốc của cây cầu sau cũng phải lớn hơn độ dốc của cây cầu trước đó. Nghĩa là, nếu như Tuấn quyết định chọn một hành trình đi qua các ngọn núi theo thứ tự \(P_1, P_2, \ldots, P_k\) thì hành trình đó sẽ phải thỏa mãn tính chất:

\[0 < A_{P_2} - A_{P_1} < A_{P_3} - A_{P_2} < \ldots < A_{P_k} - A_{P_{k-1}}\]

Yêu cầu: Hãy giúp hướng dẫn viên du lịch cho Tuấn hành trình "lên đỉnh siêu dốc" qua nhiều đỉnh núi nhất và trả lời thắc mắc của Tuấn là có bao nhiêu hành trình khác nhau đạt được nhiều đỉnh núi nhất như vậy. Hai hành trình gọi là khác nhau nếu tồn tại một cây cầu hành trình này có mà hành trình kia không hoặc ngược lại.

Input

  • Dòng đầu tiên chứa hai số nguyên dương \(N\) và \(M\) \((1 \leq N \leq 3 \times 10^5,\ 1 \leq M \leq 5 \times 10^5)\).
  • Dòng thứ hai chứa độ cao của \(N\) ngọn núi là \(N\) số nguyên dương \(A_1, A_2, ..., A_n\) \((1 \leq A_i \leq 10^9)\).
  • Dòng thứ \(i\) trong số \(M\) dòng tiếp theo chứa cặp số nguyên dương \((U_i, V_i)\) là chỉ số hai ngọn núi là hai đầu của cây cầu thứ \(i\) \((1 \leq U_i, V_i \leq N)\).

Output

In ra kết quả trên 2 dòng:

  • Dòng đầu tiên ghi ra một số nguyên là số lượng đỉnh núi của hành trình tìm được.
  • Dòng thứ hai ghi ra một số nguyên là phần dư trong phép chia số lượng lộ trình khác nhau tìm được cho \(10^9 + 7\).

Example

Test 1

Input
5 4
1 2 4 4 5
1 2
2 3
3 1
4 5
Output
3
1

Scoring

  • Có 22% số test ứng với \(N \leq 20\).
  • Có 28% số test khác ứng với \(N \leq 500\).
  • Có 20% số test khác ứng với \(M = N - 1\), và các đỉnh trong đồ thị liên thông với nhau.
  • 30% còn lại không có giới hạn gì thêm.

root

Rắn săn mồi

100 điểm

Putata đang chơi một trò chơi rắn nổi tiếng trên máy tính xách tay của mình, trong đó con rắn di chuyển trên một bàn cờ kích thước \(n \times m\). Trên bàn cờ này có thể có một số ô chứa chướng ngại vật. Con rắn có thể được biểu diễn như một dãy các cặp tọa độ xác định vị trí của thân nó: \((x_1, y_1), (x_2, y_2), \dots, (x_k, y_k)\). Ở đây, \(k\) là độ dài của con rắn. Đầu của con rắn là tại \((x_1, y_1)\), đuôi là tại \((x_k, y_k)\), và các phần thân liền kề sẽ nằm trên các ô liền kề nhau theo cạnh.

Trong trò chơi này, con rắn sẽ được điều khiển bằng một chuỗi các lệnh di chuyển. Có 5 loại lệnh mà bạn có thể sử dụng:

  • L: Di chuyển con rắn một ô sang trái. Đầu của con rắn sẽ di chuyển tới \((x_1, y_1 - 1)\).
  • R: Di chuyển con rắn một ô sang phải. Đầu của con rắn sẽ di chuyển tới \((x_1, y_1 + 1)\).
  • U: Di chuyển con rắn một ô lên trên. Đầu của con rắn sẽ di chuyển tới \((x_1 - 1, y_1)\).
  • D: Di chuyển con rắn một ô xuống dưới. Đầu của con rắn sẽ di chuyển tới \((x_1 + 1, y_1)\).
  • S: Rút ngắn chiều dài của con rắn đi một đơn vị. Đuôi của con rắn sẽ bị xóa đi, độ dài của con rắn sẽ trở thành \(k - 1\). Lưu ý rằng bạn không thể thực hiện lệnh này khi \(k = 1\).

Khi đầu của con rắn di chuyển, mỗi phần thân của nó cũng sẽ di chuyển theo. Cụ thể, phần thân thứ \(i\) \((2 \leq i \leq k)\) sẽ di chuyển đến vị trí mà phần thân thứ \((i-1)\) ở đó trước khi lệnh được thực hiện. Con rắn không thể di chuyển vào một ô có chướng ngại vật, và không thể di chuyển ra ngoài bàn cờ. Ngoài ra, con rắn không được tự va vào thân của nó, nghĩa là không được có hai phần của thân nằm trên cùng một vị trí.

Trường hợp đặc biệt

Xem xét trường hợp đặc biệt sau: Đầu của con rắn ở vị trí \((x_1, y_1)\), và đuôi ở vị trí \((x_k, y_k)\). Nếu đầu của con rắn đang di chuyển đến \((x'_1, y'_1) = (x_k, y_k)\), thì được phép hoán đổi vị trí đầu và đuôi của con rắn bằng một lệnh duy nhất khi \(k = 2\).

Yêu cầu

Bạn sẽ được cung cấp bản đồ của bàn cờ và vị trí của thân con rắn. Gọi \(f(i, j)\) là số lệnh tối thiểu để đầu của con rắn có thể đến vị trí \((i, j)\), hoặc \(0\) nếu không thể. Nhiệm vụ của bạn là tính giá trị sau:

$
\left( \sum_{i=1}^n \sum_{j=1}^m f(i, j)^2 \right) \mod 2^{32}.
$

Input

  • Dòng đầu tiên chứa ba số nguyên \(n\), \(m\) và \(k\) \((1 \leq n, m \leq 3000, 1 \leq k \leq \min\{nm, 10^5\})\) - kích thước của bàn cờ và độ dài của con rắn.
  • Trong \(k\) dòng tiếp theo, dòng thứ \(i\) chứa hai số nguyên \(x_i\) và \(y_i\) \((1 \leq x_i \leq n, 1 \leq y_i \leq m, |x_i - x_{i+1}| + |y_i - y_{i+1}| = 1)\) biểu thị vị trí của phần thân thứ \(i\) của con rắn. Đảm bảo rằng tất cả các cặp tọa độ \((x_i, y_i)\) là khác nhau và không có phần thân nào nằm trên ô chứa chướng ngại vật.
  • Trong \(n\) dòng tiếp theo, dòng thứ \(i\) chứa một chuỗi có độ dài \(m\). Nếu ô \((i, j)\) trống, ký tự thứ \(j\) trong dòng thứ \(i\) là '.'. Nếu ô \((i, j)\) chứa chướng ngại vật, ký tự đó là '#'.

Output

In ra một số nguyên không âm là đáp án cho bài toán.

Example

Test 1

Input
4 5 5
3 5
3 4
3 3
3 2
4 2
.....
.....
.....
.....
Output
293

Test 2

Input
2 2 4
1 1
1 2
2 2
2 1
..
..
Output
14

Test 3

Input
5 5 3
1 2
1 1
2 1
.....
.###.
.#.#.
.###.
.....
Output
407

Scoring

  • Có \(25\%\) số test có \(n, m, k \leq 5\).

  • Có \(25\%\) số test có \(k = 2\).

  • Có \(25\%\) số test có \(n, m \leq 300\), \(2 < k \leq 5\).

  • \(25\%\) số test còn lại không có ràng buộc gì thêm.

root

Cây cơ bản

100 điểm

Định nghĩa cây

Một cây là một đồ thị vô hướng liên thông không chứa chu trình. Tức là, cây là một đồ thị \(G = (V, E)\) thỏa mãn các điều kiện sau:

  • \(G\) liên thông, tức là luôn có đường đi giữa hai đỉnh bất kỳ.
  • \(G\) không chứa chu trình, tức là không có tập con của các cạnh tạo thành một đường khép kín.

Tính chất của cây

Một cây với \(n\) đỉnh (\(n \geq 1\)) có các tính chất sau:

  • Cây có đúng \(n-1\) cạnh.
  • Giữa hai đỉnh bất kỳ trong cây luôn tồn tại duy nhất một đường đi.
  • Thêm một cạnh bất kỳ vào cây sẽ tạo thành đúng một chu trình.
  • Loại bỏ một cạnh bất kỳ khỏi cây sẽ làm đồ thị không còn liên thông.

Ứng dụng của cây

Cây có nhiều ứng dụng quan trọng trong tin học và toán học:

  • Cấu trúc dữ liệu: Cây nhị phân tìm kiếm, cây AVL, cây đỏ-đen.
  • Mạng máy tính: Mô hình phân cấp mạng.
  • Hệ thống tệp: Cấu trúc thư mục trong hệ điều hành.
  • Nén dữ liệu: Cây Huffman.

Bài toán

Cho đồ thị có dạng một cây có \(n\) đỉnh có gốc của cây là đỉnh \(1\). Hãy trả lời các câu hỏi sau :

  • Câu hỏi \(1\) : Với mỗi \(x\) từ \(1\) đến \(n\), hãy in ra cha của \(x\) trên cây. Nếu \(x\) là gốc của cây thì in ra chính nó.
  • Câu hỏi \(2\) : Tìm khoảng cách từ gốc của cây đến tất cả các đỉnh trên cây.
  • Câu hỏi \(3\) : In ra tất cả các đỉnh lá của cây (theo thứ tự tăng dần chỉ số).
  • Câu hỏi \(4\) : Với mỗi \(x\) từ \(1\) đến \(n\), hãy in ra số lượng đỉnh trong cây con gốc \(x\).

Input

Dòng đầu tiên là hai số nguyên dương \(n\) và \(t\). \(n\) là số đỉnh của cây và \(t\) là chỉ số câu hỏi. \((1 \leq n \leq 500, 1 \leq t \leq 4)\).

\(n - 1\) dòng tiếp theo, mỗi dòng là hai số nguyên dương \(u\) và \(v\), là cạnh của cây.

Output

Với câu hỏi in ra tương ứng, xem test ví dụ để hiểu rõ hơn.

Example

Test 1

Input
5 1
1 2
1 3
2 4
2 5
Output
1 1 1 2 2 

Test 2

Input
5 2
1 2
1 3
2 4
2 5
Output
0 1 1 2 2 

Test 3

Input
5 3
1 2
1 3
2 4
2 5
Output
3 4 5 

Test 4

Input
5 4
1 2
1 3
2 4
2 5
Output
5 3 1 1 1 

root

Xâu đối xứng

100 điểm

Một xâu được gọi là đối xứng nếu đọc từ trái qua phải và đọc từ phải qua trái đều giống nhau.

Ví dụ xâu "aba", "abba" là xâu đối xứng; còn xâu "abc", "abca" thì không.

Bạn được cho \(N\) xâu, như vậy sẽ có \(N \times N\) cặp xâu. Bạn hãy đếm xem trong \(N \times N\) cặp xâu này, có bao nhiêu cặp mà khi nối xâu thứ hai vào sau xâu thứ nhất sẽ cho ra một xâu đối xứng.

Input

  • Dòng đầu ghi một số \(N\).

  • \(N\) dòng sau mỗi dòng mô tả một xâu, bắt đầu là độ dài của xâu, sau đó là một dấu cách và tiếp theo là nội dung của xâu. (Xâu chỉ gồm các chữ cái latin thường và có độ dài nguyên dương)

Dữ liệu vào luôn đảm bảo tổng độ dài các xâu không quá 1000000

Output

  • Ghi ra một số duy nhất là số cặp xâu tìm được.

Example

Test 1

Input
3
1 a
2 ab
2 ba
Output
5
Xem thêm