Tin học trẻ B - Tỉnh Bắc Giang 2023

Bộ đề bài

1. Số ở giữa - Tin hoc trẻ tỉnh Bắc Giang

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

Cho \(2\) số nguyên \(A\)\(B\). Tìm số nguyên \(M\) nằm giữa \(A\)\(B\) sao cho khoảng cách giữa \(A \times M\)\(B \times M\) là nhỏ nhất. \(M\) phải khác \(A\)\(B\)

Input

  • Gồm 1 dòng duy nhất chứa hai số nguyên \(A\)\(B\) \((-10^{9} \leq A \leq B - 2 \leq 10^{9})\)

Output

  • Gồm 1 dòng duy nhất chứa số nguyên \(M\) cần tìm.

Example

Test 1

Input
1 3
Output
2

2. Choose - Tin hoc trẻ tỉnh Bắc Giang

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

Thuận quyết định làm một thương nhân buôn bán đồ cổ để lo cho gia đình. Anh ấy cần nhập về một lượng hàng hóa để bắt đầu công vịệc buôn bán của mình. Tại chợ có \(n\) món đồ Thuận có thể mua. Thuận có thể chọn mua món đồ thứ \(i\) với giá \(a_{i}\) và cậu ấy có thể bán lại món đồ đó với giá \(b_{i}\).

Việc mua bán ở đây khá thuận lợi. Nhờ uy tín của bản thân, Thuận được các bên cho phép nhận hàng trước. Thuận có thể nhận tiền bán món đồ \(b_{i}\) trước khi bán nó, miễn là sau cùng Thuận có đưa vật phẩm \(i\) cho bên mua. Việc này đảm bảo minh bạch, vì Thuận phải kí hợp đồng rõ ràng với các bên.

Sở dĩ có sự chênh lệch về giá vì Thuận mua và bán ở hai chợ khác nhau.

Trước khi đi chợ và trở thành một thương nhân như kế hoạch, Thuận cần dự trù số tiền mình cần mang theo. Anh đặt ra \(m\) câu hỏi, câu hỏi thứ \(j\) là: "Giả sử rằng Thuận cầm đi \(k_{j}\) đồng, và buôn bán các món đồ theo mức giá như trên, thì cuối cùng Thuận có thể mua được tối đa bao nhiêu món đồ?"

Hãy lập trình để tính đáp án cho câu hỏi trên.

Input

  • Dòng thứ nhất chứa hai số nguyên dương \(n, m\) \((n, m \leq 3 \times 10^{5})\) - lần lượt là số món đồ và số câu hỏi
  • Dòng thứ hai chứa \(n\) số nguyên \(a_{i}\) \((0 \leq a_{i} \leq 10^{9})\).
  • Dòng thứ ba chứa \(n\) số nguyên \(b_{i}\) \((0 \leq b_{i} \leq 10^{9})\).
  • Dòng thứ tư chứa \(m\) số nguyên \(k_{j}\) \((0 \leq k_{j} \leq 10^{15})\).

Output

  • Với mỗi câu hỏi, in ra đáp án trên một dòng riêng - số món đồ lớn nhất có thể mua.

Scoring

  • Subtask \(1\) (\(40\%\) số điểm): \(n \times m \leq 10^{7}\).
  • Subtask \(2\) (\(40\%\) số điểm): \(a_{i} \geq b_{i}\)
  • Subtask \(3\) (\(20\%\) số điểm): không có ràng buộc gì thêm.

Example

Test 1

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

Với \(k = 0\) đồng vốn, Thuận có thể nhận trước tiền bán các vật phẩm \(1, 3, 5, 6, 7\), được tổng là \(1 + 8 + 6 + 2 + 5 = 22\). Sau đó lại trả tiền mua hàng là \(4 + 7 + 5 + 2 + 4 = 22\). Sau khi nhận được hàng, Thuận giao các vật như đã thỏa thuận.

3. LLQQDD - Tin hoc trẻ tỉnh Bắc Giang

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

Trường THPT Chuyên Lê Quý Đôn đang tổ chức một cuộc thi giải mã thu hút rất nhiều sự quan tâm của các bạn học sinh, đặc biệt là các bạn có đam mê với lập trình. Đề bài của vòng đầu tiên được ban tổ chức đưa ra như sau:

Ban đầu, hệ thống mã hoá sinh ra một xâu gồm \(3 \times k\) ký tự, đầu tiên là \(k\) ký tự L, tiếp theo là \(k\) ký tự Q và cuối cùng là \(k\) ký tự D. Sau đó, hệ thống sẽ thêm một số ký tự L, Q hoặc D vào những vị trí bất kỳ trong xâu cho đến khi xâu có độ dài \(n\). Sau đó, hệ thống sẽ cho người dùng biết \(n\), \(k\) và xâu sau khi đã biến đổi. Người giải mã cần chọn ra một xâu con gồm các ký tự liên tiếp và đếm số lượng ký tự cần xoá ít nhất để thu được xâu ban đầu mà hệ thống sinh ra. Nếu kết quả của người chơi trùng khớp với kết quả của hệ thống thì người đó sẽ được xem là hoàn thành vòng thi và nhận được tấm vé đến vòng tiếp theo.

Là một người đã có nhiều kinh nghiệm với lập trình, liệu bạn có thể giành được tấm vé này chứ?

Input

  • Dòng đầu tiên chứa hai số nguyên \(n\)\(k\) \(\left(3 \leq n \leq 10^{7}, 1 \leq k \leq \left \lfloor \dfrac{n}{3} \right \rfloor \right)\).
  • Dòng tiếp theo chứa một xâu độ dài \(n\) chỉ gồm các ký tự L, QD.

Output

  • Một dòng duy nhất chứa một số nguyên là kết quả của bạn. Trường hợp đặc biệt: nếu không thể chọn ra xâu con nào để thu được xâu ban đầu mà hệ thống sinh ra, bạn cần in ra -1

Scoring

  • Subtask \(1\) (\(20\%\) số điểm): \(n \leq 21\).
  • Subtask \(2\) (\(30\%\) số điểm): \(n \leq 3 \times 10^{3}\).
  • Subtask \(3\) (\(30\%\) số điểm): \(n \leq 2 \times 10^{5}\).
  • Subtask \(4\) (\(20\%\) số điểm): Không có ràng buộc gì thêm.

Example

Input
10 2
LLDLQDQDDL
Output
2
Note

Chọn xâu con LDLQDQDD, bỏ ký tự thứ \(2\)\(5\) tính từ trái qua sẽ thu được xâu LLQQDD là xâu ban đầu mà hệ thống sinh ra.

4. GCD - Tin hoc trẻ tỉnh Bắc Giang

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

Hàm băm (hash function) là một hàm số giúp chuyển dữ liệu bất kì thành một mã băm (hash code), thường có dạng một xâu có độ dài cố định. Hàm băm có ứng dụng rộng rãi trong nhiều lĩnh vực, trong đó có mật mã học (cryptography), và thậm chí là ứng dụng trong blockchain. Người ta có thể thiết kế ra một hàm băm \(f\) bất kì có tính chất sau:

  • Đụng độ (hash collision) có tỉ lệ rất thấp, hầu như không xảy ra. Tức \(x \neq y \Rightarrow f(x) \neq f(y)\)
  • Giả sử ta biết \(y = f(x)\), việc tìm ra \(x\) là rất khó (tốn độ phức tạp thời gian quá lớn)
  • Khi đó, hàm băm có tính chất "một chiều" và có thể áp dụng được vào trong mã hóa, mật mã học.

Sau khi nghe hội thảo về những kiến thức trên, Nghĩa cảm thấy rất thú vị và muốn áp dụng ngay. Cậu muốn mã hóa hai dãy số nguyên dương \(a,b\) có kích thước lần lượt là \(n, m\) phần tử. Cậu định nghĩa:

  • \(A = a_{1} \times a_{2} \times \dots \times a_{n}\) (tích các số trong dãy \(a\))
  • \(B = b_{1} \times b_{2} \times \dots \times b_{m}\) (tích các số trong dãy \(b\))
  • \(f(a,b) = \gcd(A, B) \mod (10^{9} + 7)\), tức là ước chung lớn nhất của tích hai dãy, chia lấy dư cho \((10^{9} + 7)\) vì số rất lớn.

Nghĩa nhận thấy hàm \(f\) trên có tính chất "một chiều" như đã nêu trên, nhưng do cậu không giỏi lắm về tin học nên chưa thiết kế được thuật toán hiệu quả để tính \(f\). Nghĩa cần được các bạn thí sinh THT trợ giúp!

Yêu cầu: Cho hai dãy \(a,b\), hãy tính và in ra \(f(a, b)\)

Input

  • Dòng thứ nhất chứa hai số nguyên \(n, m\) \((1 \leq n, m \leq 5 \times 10^{5})\) - lần lượt là kích thước hai dãy.
  • Dòng thứ hai chứa \(n\) số nguyên \(a_{i}\) \((1 \leq a_{i} \leq 10^{7})\).
  • Dòng thứ ba chứa \(m\) số nguyên \(b_{i}\) \((1 \leq b_{i} \leq 10^{7})\).

Output

  • Gồm một dòng duy nhất chứa \(f(a, b)\)

Scoring

  • Subtask \(1\) (\(30\%\) số điểm): \(n, m \leq 14\)\(a_{i}, b_{i} \leq 20\).
  • Subtask \(2\) (\(30\%\) số điểm): \(n = 1\)
  • Subtask \(3\) (\(20\%\) số điểm): \(n, m, a_{i}, b_{i} \leq 10^{5}\)
  • Subtask \(4\) (\(20\%\) số điểm): không có ràng buộc gì thêm

Example

Test 1

Input
4 4
5 3 2 18
6 7 10 3
Output
180

5. Xin chào 1

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

Nam là người thích chat với bạn bè trên Internet. Cậu ấy đã lập ra một phòng chat với điều kiện rằng trước khi vào phòng chat, mọi người phải chào hỏi trước.

Một câu chào được định nghĩa rằng, câu chào đó phải là một xâu kí tự, chỉ gồm các chữ cái, không chứa kí tự trắng, sao cho khi xóa đi một số chữ cái, nó sẽ trở thành từ hello, tất nhiên là sẽ không được phép tráo đổi vị trí các chữ cái, mà chỉ được xóa bớt một số chữ cái.

Ví dụ khi Bình muốn vào phòng chat, Bình gõ ahhellllloou thì hệ thống sẽ xem xét xâu này và sẽ tự động loại bỏ các chữ cái để trở thành từ hello. Như vậy Bình được vào phòng chat.

Nhưng khi Bình gõ hlelo, hệ thống không thể làm cách nào xóa bớt chữ cái để trở thành từ hello được. Như vậy, Bình không được vào phòng chat.

Yêu cầu: Cho \(N\) câu chào, hãy xác định xem câu chào nào được chấp nhận?

Input

  • Dòng thứ nhất chứa số nguyên dương \(N\) \((N \leq 100)\)
  • \(N\) dòng tiếp theo, mỗi dòng chứa xâu chữ cái mà Bình định gõ, với chiều dài từ \(1\) đến \(100\) chữ cái.

Output

  • Gồm \(N\) dòng, mỗi dòng tương ứng với câu chào, câu chào được đồng ý xuất YES, còn không, xuất NO.

Example

Test 1

Input
4
ahhellllloou
hlelo
helhcludoo
HelhcLudoo 
Output
YES
NO
YES
NO

6. Xin chào 2

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

Nam là người thích chat với bạn bè trên Internet. Cậu ấy đã lập ra một phòng chat với điều kiện rằng trước khi vào phòng chat, mọi người phải chào hỏi trước.

Một câu chào được định nghĩa rằng, câu chào đó phải là một xâu kí tự, chỉ gồm các chữ cái, không chứa kí tự trắng, sao cho khi xóa đi một số chữ cái, nó sẽ trở thành một xâu từ khóa \(Key\) cho trước, tất nhiên là sẽ không được phép tráo đổi vị trí các chữ cái, mà chỉ được xóa bớt một số chữ cái.

Ví dụ: Với từ khóa là \(Key\)xinchao khi Bình muốn vào phòng chat, Bình gõ choxiancaihao thì hệ thống sẽ xem xét xâu này và sẽ tự động loại bỏ các chữ cái để trở thành từ xinchao. Như vậy Bình được vào phòng chat.

Nhưng khi Bình gõ choxian, hệ thống không thể làm cách nào xóa bớt chữ cái để trở thành từ xinchao được. Như vậy, Bình không được vào phòng chat.

Yêu cầu: Cho từ khóa \(Key\)\(N\) câu chào, hãy xác định xem câu chào nào được chấp nhận?

Input

  • Dòng thứ nhất chứa số nguyên dương \(N\) (\(N≤100\))
  • Dòng thứ hai chứa từ khóa \(Key\) (có độ dài \(≤10^4\))
  • \(N\) dòng tiếp theo, mỗi dòng chứa xâu chữ cái mà Bình định gõ (có độ dài \(≤10^6\)).

Output

  • Gồm \(N\) dòng, mỗi dòng tương ứng với câu chào, câu chào được đồng ý xuất YES, còn không, xuất NO.

Sample

Test 1

Input
4
hello
ahhellllloou
hlelo
helhcludoo
HelhcLudoo
Output
YES
NO
YES
NO