Đ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

Gửi thư

100 điểm

Đất nước \(X\) có \(n\) bưu cục, các bưu cục lần lượt được đánh số từ \(1\) tới \(n\) và lần lượt nằm trên các điểm \(1\), \(2\), \(3\), ..., \(n\) trên trục số.

Bưu cục \(i\) có thể gửi thư tới bưu cục \(j\) nếu khoảng cách giữa chúng không vượt quá \(p_{i}\). Bưu cục \(i\) có thể nhận thư từ bưu cục \(j\) nếu khoảng cách giữa chúng không vượt quá \(p_{i}\). Vì công nghệ hiện tại quá tối tân, dù khoảng cách có xa cỡ nào thì việc gửi thư và nhận thư chỉ cần thực hiện trong \(1\) giây.

Có một lá thư đang nằm ở bưu cục \(a\) và cần chuyển đến bưu cục \(b\), hỏi thời gian ngắn nhất để bưu cục \(b\) nhận được thư là bao lâu ?

Input

Dòng đầu tiên gồm \(3\) số nguyên dương \(n, a, b\). \((a, b <= n\), \(n <= 2.10^5)\)

Dòng tiếp theo gồm \(n\) số nguyên dương \(p_{1}, p_{2}, ..., p_{n}\).

Output

Kết quả bài toán.

Example

Test 1

Input
10 2 9
4 1 1 1 5 1 1 1 1 5
Output
4
Note

\(2\) -> \(1\) -> \(5\) -> \(10\) -> \(9\)

Scoring

\(40\%\) số test có \(n <= 1000\).

\(60\%\) số test có \(n <= 200000\).

root

Xâu nguyên tố

100 điểm

Xâu \(S\) này được gọi là xâu nguyên tố nếu số lượng kí tự chỉ xuất hiện đúng 1 lần trong xâu \(S\) là số nguyên tố.

Bạn được cho xâu \(S\) chỉ bao gồm các ký tự thường trong bảng chữ cái \(ABC\). Vậy hãy kiểm tra xem xâu \(S\) có phải là xâu nguyên tố hay không?

Input

  • Dòng đầu ghi số \(q\) \((q \leq 100)\), là số câu hỏi.

  • \(q\) dòng tiếp theo, mỗi dòng ghi ra xâu \(S\) (độ dài xâu \(S\) không quá \(1000\)).

Output

  • Gồm \(q\) dòng, mỗi dòng ghi ra kết quả tương ứng của mỗi câu hỏi.

Example

Test 1

Input
4
lcgfwrkvudgzzckaadeg
flildnmjaxhfpwjuiowd
truirounxoarzmeriwyt
ipoqfcmgdadtlajeecni
Output
YES
NO
NO
NO

root

Dựng mảng

100 điểm

Ta xây dựng dãy số \(a_1, a_2, \dots, a_n\) theo các quy tắc sau:

  • \(a_1\) là một số nguyên bất kỳ thuộc đoạn \([1, k]\).
  • Với mỗi \(i\) từ \(2\) đến \(n\), giá trị \(a_i\) được chọn sao cho:

  • \(a_i = a_{i-1} + 1\) hoặc \(a_i = a_{i-1} - 1\);

  • và luôn đảm bảo \(1 \le a_i \le k\).

Sau khi xây dựng xong dãy \(a\), ta định nghĩa:

  • \(lst(i) = j\) là vị trí \(j\) cuối cùng sao cho \(a[j]=i\).
  • \(lst(i) = 0\) nếu không tồn tại vị trí \(j\) sao cho \(a[j]=i\).

Từ dãy \(a\), ta thu được một dãy mới gồm \(k\) phần tử là \((\text{lst}(1), \text{lst}(2), \dots, \text{lst}(k))\).

Vậy với bất kì dãy \(a\) có thể tạo ra, yêu cầu đếm xem có thể tạo được bao nhiêu dãy \(lst\) khác nhau.

Input

Gồm hai số nguyên \(n\) và \(k\) \((1 \le n, k \le 5000)\).

Output

In ra một số nguyên --- số lượng dãy \(lst\) khác nhau thu được, modulo \(10^9 + 7\).

Example

Test 1

Input
4 3
Output
8

Scoring

  • Subtask 1 (20 điểm): \(n, k \le 18\)
  • Subtask 2 (30 điểm): \(n, k \le 50\)
  • Subtask 3 (30 điểm): \(n, k \le 500\)
  • Subtask 4 (20 điểm): Không có ràng buộc gì thêm.

root

Truy vấn

100 điểm

Alice là một kĩ sư đang làm việc trên một loại vi xử lí mới. Bộ vi xử lí làm việc trên tập số nguyên không âm \(S\) (các số có thể được xuất hiện nhiều lần) để mô phòng sự sống trong Matrix. Ban đầu tập \(S\) là rỗng, bộ vi xử lí có các loại truy vấn sau:

  • Truy vấn dạng: \(0\) \(x\), truy vấn này thêm một số nguyên \(x\) vào \(S\) \((0 \leq x \leq 10^{5})\). Nếu giá trị \(x\) đã có trong \(S\) thì truy vấn này vẫn được thực hiện.

  • Truy vấn dạng: \(1\) \(x\), truy vấn này xóa một số \(x\) khỏi \(S\) \((0 \leq x \leq 10^{5})\). Nếu giá trị \(x\) không thuộc \(S\) thì truy vấn này không cần làm gì. Nếu giá trị \(x\) xuất hiện nhiều lần trong \(S\) thì truy vấn này chỉ xóa đi một lần.

  • Truy vấn dạng: \(2\) \(a\), truy vấn này thay đổi cả phần tử của \(S\) với sự ảnh hưởng của \(a\) \((0 \leq a \leq 10^{5})\). Cụ thể, với \(x\) thuộc \(S\) được thay bằng \(x \oplus a\). Phép toán \(\oplus\) (trong các ngôn ngữ lập trình thường được kí hiệu là ^) được định nghĩa như sau: Kết quả của phép toán \(\oplus\) giữa hai số nguyên không âm \(x\) và \(y\) là một số nguyên không âm \(z\) trong đó bit thứ \(i\) trong biểu diễn nhị phân của \(z\) sẽ là \(0\) khi bit thứ \(i\) trong biểu diễn nhị phân của \(x\) và \(y\) bằng nhau (đồng thời bằng \(0\) hoặc \(1\)), ngược lại bit thứ \(i\) trong biểu diễn nhị phân của \(z\) sẽ là \(1\).

  • Truy vấn dạng: \(3\) \(k\), truy vấn này tính tổng \(k\) phần tử nhỏ nhất trong \(S\) \((0 \leq k \leq |S|)\).

Để kiểm tra trước khi đưa vào sử dụng, Alice muốn bạn lập trình xử lí các kiểm tra lại các truy vấn.

Input

  • Dòng thứ nhất chứa số nguyên dương \(Q\) \((1 \leq Q \leq 10^{5})\) là số lượng truy vấn.

  • Dòng thứ \(i\) \((1 \leq i \leq Q)\) trong \(Q\) dòng tiếp theo chứa hai số nguyên mô tả loại truy vấn.

Output

  • Với mỗi truy vấn loại \(3\), hãy in ra tổng của \(k\) phần tử nhỏ nhất trong \(S\) trên một dòng.

Example

Test 1

Input
6
0 1
2 2
0 3
3 2
2 2
3 1
Output
6
1

Scoring

  • Subtask \(1\) (\(25\%\) số điểm): \(Q \leq 1000\).

  • Subtask \(2\) (\(25\%\) số điểm): không có truy vấn loại \(2\).

  • Subtask \(3\) (\(25\%\) số điểm): \(k \leq 10\).

  • Subtask \(4\) (\(25\%\) số điểm): không có rằng buộc gì thêm.

Xem thêm