Đ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

Chia kẹo

100 điểm

Trong một lớp học, hôm nay là ngày sinh nhật của \(m\) bạn. Để chúc mừng, cả lớp đã mua \(n\) gói kẹo. Mỗi gói kẹo có một loại kẹo riêng, được đánh số bằng một số nguyên dương từ \(1\) đến \(n\). Lớp trưởng đã sắp xếp các gói kẹo thành một dãy, đánh số từ \(1\) đến \(n\).

Để chia kẹo cho \(m\) bạn, lớp trưởng quyết định chia dãy kẹo này thành \(m\) đoạn liên tiếp không rỗng. Mỗi bạn sẽ nhận một đoạn kẹo. Vì các bạn đều thích kẹo có nhiều loại khác nhau, giá trị của mỗi đoạn kẹo được tính bằng số lượng các loại kẹo khác nhau có trong đoạn đó.

Lớp trưởng muốn làm hài lòng tất cả các bạn và thể hiện sự khéo léo của mình bằng cách tìm cách chia dãy kẹo thành \(m\) đoạn sao cho tổng giá trị của tất cả \(m\) đoạn là lớn nhất có thể.

Input

Dữ liệu vào được cung cấp từ đầu vào chuẩn (stdin) theo định dạng sau:

  • Dòng đầu tiên chứa hai số nguyên dương \(n\) và \(m\) (\(1 \le n \le 50000\), \(1 \le m \le \min(n, 50)\)).
  • Dòng thứ hai chứa \(n\) số nguyên \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)), là loại kẹo của gói kẹo thứ \(i\).

Output

In ra một số nguyên duy nhất là giá trị lớn nhất của tổng giá trị các đoạn.

Example

Test 1

Input
8 3
7 7 8 7 7 8 1 7
Output
6

Scoring

  • Subtask \(1\) (\(25\%\) số điểm): \(n \leq 20\).
  • Subtask \(2\) (\(25\%\) số điểm): \(n \leq 200\).
  • Subtask \(3\) (\(25\%\) số điểm): \(n \leq 1000\).
  • Subtask \(4\) (\(25\%\) số điểm): không có ràng buộc 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

Mảng 1

100 điểm

Khai báo một mảng một chiều có \(20\) phần tử có kiểu số nguyên.
Gán giá trị cho các phần tử như sau:

  • Phần tử thứ \(0\) có giá trị $ = 10$.
  • Phần tử thứ \(5\) có giá trị $ = 10$.
  • Phần tử thứ \(2\) có giá trị $ = 30$.
  • Phần tử thứ \(19\) có giá trị $ = 30$.

Sau đó, in ra màn hình giá trị của tổng \(4\) phần tử bao gồm phần tử \(0\), phần tử \(2\), phần tử \(5\), và phần tử \(19\).

Input

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

Output

Một dòng duy nhất chứa một số nguyên là tổng của \(4\) phần tử đã chỉ định.

Example

Test 1

Input
Nothing
Output
80

root

Chẵn lẻ

100 điểm

Viết chương trình nhập vào từ bàn phím một số nguyên \(x\). Nếu \(x\) là số chẵn, in ra "SO CHAN", ngược lại in ra "SO LE".

Example

Test 1

Input
2
Output
SO CHAN

Test 2

Input
3
Output
SO LE

Test 3

Input
4
Output
SO CHAN
Xem thêm