Tính tổng

Sunlight

Cho n số nguyên liên tiếp từ 1 đến n và hai số nguyên dương k,m
Với mỗi i, ta định nghĩa giá trị C_i là tích k số liên tiếp từ i-k+1 đến i: C_i=(i-k+1)\cdot (i-k+2)\cdot \dots \cdot (i-1)\cdot i.

Ví dụ: n=6,k=3, ta có các giá trị: C_3=1\cdot 2\cdot 3,C_4=2\cdot 3\cdot 4,C_5=3\cdot 4\cdot 5,C_6=4\cdot 5\cdot 6.

Yêu cầu: Cho n,k,m, hãy tính tổng S=C_k+C_{k+1}+\dots+C_n. Vì S có thể rất lớn nên bạn chỉ cần in ra phần dư của S cho m

Input, Output và Subtasks

Input
  • Một dòng ghi 3 số n,k,m (n\le 10^{18},k\le 500,m\le 10^{18})
Output
  • Một số duy nhất là giá trị S mod M

Sample 1

Input
6 3 1234 
Output
210

Sample 2

Input
10 5 666013 
Output
55440

An interesting counting problem about product division

huyhau6a2

Một bài toán rất thú vị về tích chia hết

Bạn được cho dãy số a gồm n số và 2 số m, k. Nhiệm vụ của bạn là đếm số bộ k số b_1,b_2,\dots,b_k (1\le b_1<b_2<\dots<b_k\le n) thỏa mãn a_{b_1}\times a_{b_2}\times \dots \times a_{b_k} chia hết cho m. Vì kết quả có thể rất lớn nên hãy xuất kết quả sau khi mod\ 10^9+7

Input, Output và Subtasks

Input
  • Dòng đầu tiên chứa 3 số nguyên n,m và k (1\le k\le n\le 10^6,1\le m\le 10^9,k\le 10)
  • Dòng thứ hai chứa n số nguyên không âm a_1,a_2,\dots,a_n (0\le a_i\le 10^9)
Output
  • Số nguyên duy nhất là số bộ k số thỏa mãn yêu cầu sau khi mod\ 10^9+7
Subtasks

Bài toán có 20 subtask. Các subtask được chia đều (NA tương ứng với không có subtask đó):

Subtask 1 Subtask 2 Subtask 3 Subtask 4 Subtask 5
k = 1 n\le 10^6 NA NA NA NA
k = 2 n\le 5000 n\le 10^6 NA NA NA
k = 3 n\le 400 n\le 5000 n\le 10^4 n\le 10^5 n\le 10^6
k = 4 n\le 75 n\le 400 n\le 10^4 n\le 10^5 n\le 10^6
k = 5 n\le 30 n\le 75 n\le 10^4 n\le 10^5 n\le 10^6
k\le 10 n\le 5000 n\le 10^6 NA NA NA

Sample 1

Input
5 6 3
2 3 1 2 2
Output
6
Note

Có 6 bộ 3 số thỏa mãn là (1,2,3), (1,2,4), (1,2,5), (2,3,4), (2,3,5), (2,4,5)

Sample 2

Input
10 3 5
1 2 3 4 5 6 7 8 9 10
Output
231
Note

Có tất cả 231 bộ 5 số thỏa mãn chia hết cho 3

TLEoj Contest #01 - Tổng chữ số cân bằng

huyhau6a2

Bạn được cho 2 số l,r. Ta gọi f(x) là tổng chữ số của x. Đếm số lượng số x nằm trong đoạn [l,r] thỏa mãn f(x)=f(x+f(x))

Input, Output và Subtasks

Input
  • Dòng đầu tiên nhập số t chỉ số trường hợp thử nghiệm (t\le 3\cdot 10^5)
  • Sau đó là t dòng, mỗi dòng nhập 2 số l,r (1\le l\le r\le 10^{18})
Output
  • Với mỗi trường hợp thử nghiệm, xuất ra duy nhất 1 số trên một dòng là số lượng số x thỏa mãn
Subtasks
  • Subtask 1 (5\%): 1\le l\le r\le 100.
  • Subtask 2 (5\%): 1\le l\le r\le 10^3.
  • Subtask 3 (10\%): 1\le l\le r\le 10^5.
  • Subtask 4 (10\%): 1\le l\le r\le 10^6.
  • Subtask 5 (10\%): 1\le l\le r\le 10^7.
  • Subtask 6 (10\%): 1\le l\le r\le 10^8.
  • Subtask 7 (10\%): t=1,r-l\le 10^6.
  • Subtask 8 (40\%): Không có ràng buộc gì thêm

Sample

Input
5
1 81
12 125
69 420
90 120
12345 54321
Output
9
10
28
2
2939
Note
  • Trong trường hợp thử nghiệm thứ nhất, các số thỏa mãn là: 9,18,27,36,45,54,63,72,81
  • Trong trường hợp thử nghiệm thứ hai, các số thỏa mãn là: 18,27,36,45,54,63,72,81,108,117
  • Trong trường hợp thử nghiệm thứ bốn, các số thỏa mãn là: 108,117

TLE-oj Cup Round 10 - Du lịch

Sunlight

Đà Nẵng - nơi được mệnh danh là "thành phố đáng đến nhất Việt Nam", nơi đây đang dần trở thành điểm sáng của cả nước trong lĩnh vực du lịch, thu hút hàng triệu lượt du khách mỗi năm bởi vẻ trẻ trung, văn minh và hiện đại.

An là một cậu bé thích khám phá các mảnh đất mới. Để chuẩn bị cho một kì nghỉ hè đáng nhớ sau một năm học đầy căng thẳng, An và gia đình sẽ đi du lịch tại thành phố Đà Nẵng thân yêu. Hơn thế nữa cậu được bố mẹ giao cho công việc lên kế hoạch cho chuyến đi.

Thành phố Đà Nẵng có n điểm tham quan được đánh số từ 1 đến n, điểm tham quan thứ i có tọa độ (x_i,y_i) được kết nối với nhau bằng những con đường một chiều. Vì địa hình đặc thù nên thành phố chỉ đầu tư xây đường đi từ điểm tham quan thứ i đến điểm tham quan thứ j nếu x_i>x_j và y_i<y_j. Bạn An muốn có nhiều ký ức đẹp khi đến với mảnh đất Đà Nẵng nên muốn đi qua nhiều điểm tham quan nhất.

Yêu cầu: Em là một người dân đang sinh sống và học tập tại Đà Nẵng, hãy giúp bạn An tìm ra một phương án đi sao cho số điểm tham quan mà bạn An đi qua là lớn nhất.

Input, Output và Subtasks

Input: (DULICHDN.inp)
  • Dòng đầu tiên chứa số nguyên n\ (n\le 10^6) là số điểm tham quan
  • Dòng thứ hai chứa n số nguyên x_1,x_2,\dots,x_n\ (1\le x_i\le 10^9) lần lượt là hoành độ của các điểm tham quan
  • Dòng thứ ba chứa n số nguyên y_1,y_2,\dots,y_n\ (1\le y_i\le 10^9) lần lượt là tung độ của các điểm tham quan
Output: (DULICHDN.out)
  • Một dòng duy nhất chứa số điểm tham quan tối đa mà bạn An có thể đi qua
Subtasks
  • Subtask 1 (50\%): n \le 1000.
  • Subtask 2 (50\%): Không có giới hạn gì thêm.

Sample

Input (DULICHDN.inp)
6
3 2 6 4 5 1
5 5 6 2 1 4
Output (DULICHDN.out)
3
Note
  • Các điểm tham quan bạn An và gia đình có thể đi qua có tọa độ lần lượt là (5,1); (4,2); (3,5)

Bộ ba số

huyhau6a2

Cho n số nguyên không âm a_1,a_2,\dots,a_n và một số nguyên dương m. Hãy đếm số bộ ba số (i,j,k) (i<j<k) mà a_i\cdot a_j\cdot a_k chia hết cho m

Input, Output và Subtasks

Input
  • Dòng đầu tiên chứa 2 số nguyên n và m (3\le n\le 10^5,1\le m\le 10^9)
  • Dòng thứ hai chứa n số nguyên không âm a_1,a_2,\dots,a_n (0\le a_i\le 10^9)
Output
  • Số nguyên duy nhất là số bộ ba số thỏa mãn yêu cầu
Subtasks
  • Subtask 1 (25\%): n\le 200
  • Subtask 2 (25\%): n\le 2000
  • Subtask 3 (25\%): n\le 10^4
  • Subtask 4 (25\%): Không có ràng buộc gì thêm

Sample 1

Input
5 6
2 3 1 2 2
Output
6
Note

Có 6 bộ ba (i,j,k) thỏa mãn là (1,2,3), (1,2,4), (1,2,5), (2,3,4), (2,3,5), (2,4,5)

Sample 2

Input
10 3
1 2 3 4 5 6 7 8 9 10
Output
85
Note

Có tất cả 85 bộ ba số (i,j,k) thỏa mãn chia hết cho 3

Chứng khoán (OLP 30/4 2023)

Sunlight

Chứng khoán là một trong những kênh đầu tư nhiều rủi ro. Nhà đầu tư cần phân tích nhiều yếu tố thị trường để quyết định đầu tư vào một cổ phiếu. Một trong những tham số được nhiều nhà đầu tư quan tâm là tính ổn định giá trị của một cổ phiếu. Xét giá bán của một cổ phiếu trong nhiều phiên giao dịch. Cổ phiếu được xem là có giá ổn định trong một khoảng thời gian nếu khoảng chênh lệch của giá bán cao nhất và giá bán thấp nhất của cổ phiếu đó trong khoảng thời gian trên không vượt quá ngưỡng ổn định giá T cho trước

Yêu cầu: Cho biết giá bạn một cổ phiếu trong N phiên giao dịch. Hãy viết chương trình tính số phiên giao dịch dài nhất mà cổ phiếu đó có giá ổn định

Input, Output và Subtasks

Input: (CHUNGKHOAN.inp)
  • Dòng đầu chứa 2 số nguyên T và N lần lượt là ngưỡng ổn định giá và số phiếu giao dịch (0\le T\le 2\cdot 10^9, 1<n\le 3\cdot 10^6)
  • Dòng thứ hai chứa N số nguyên G_i (0\le G_i\le 2\cdot 10^9) lần lượt cho biết giá bán của cổ phiếu trong N phiên giao dịch
Output: (CHUNGKHOAN.out)
  • Số nguyên duy nhất là số phiên giao dịch dài nhất mà cổ phiếu có giá ổn định
Subtasks
  • Subtask 1 (30\%): 1<N\le 10^4
  • Subtask 2 (20\%): 10^4<N\le 5\cdot 10^5
  • Subtask 3 (50\%): Không có ràng buộc gì thêm

Sample 1

Input (CHUNGKHOAN.inp)
5 10
5 7 9 20 15 13 20 12 11 1
Output (CHUNGKHOAN.out)
3

Chuẩn hóa (THTB ĐN 2023)

Sunlight

Nhập vào một xâu s là họ tên của một người, hãy chuẩn hóa lại họ tên đó. Xâu họ tên là xâu chuẩn hóa khi thỏa mãn điều kiện sau:

  • Không có dấu cách nữa
  • Chữ cái đầu mỗi từ viết in hoa còn lại in thường

Input, Output và Subtasks

Input
  • Nhập từ bàn phím một xâu s là họ tên của một người có độ dài không quá 255 ký tự
Output
  • In ra màn hình xâu họ tên sau khi được chuẩn hóa

Sample 1

Input
          NgUyen  vAn Ca
Output
Nguyen Van Ca

Sample 2

Input
lE vaN    TEO
Output
Le Van Teo

Trung bình cộng (THTB ĐN 2023)

Sunlight

Cho số nguyên n và dãy gồm n số nguyên a_1, a_2,\dots,a_n. Tìm cách xóa đi tối đa 2 dãy con liên tiếp không cắt nhau của dãy đó để các phần tử còn lại có trung bình cộng lớn nhất.

Note: Không có trung bình cộng của dãy rỗng

Input, Output và Subtasks

Input: (TBCONG.inp)
  • Dòng đầu tiên chứa số nguyên dương n (1\le n\le 10^6) là số phần tử của dãy số
  • Dòng thứ hai gồm n số nguyên a_1,a_2,\dots,a_n (|a_i|\le 10^9) là các phần tử của dãy
Output: (TBCONG.out)
  • Số nguyên duy nhất là phần nguyên trung bình cộng của các phần tử còn lại
Subtasks
  • Subtask 1 (30\%): n\le 10^3
  • Subtask 2 (30\%): n\le 10^5
  • Subtask 3 (40\%): Không có ràng buộc gì thêm

Sample 1

Input (TBCONG.inp)
5
2 5 5 1 3
Output (TBCONG.out)
5
Note

Xóa đi 2 dãy [1,1] và [4,5]

Bộ ba số (THTB ĐN 2023)

Sunlight

Cho n số nguyên không âm a_1,a_2,\dots,a_n và một số nguyên dương m. Hãy đếm số bộ ba số (i,j,k) mà a_i\cdot a_j\cdot a_k chia hết cho m (lưu ý nếu 2 bộ ba mà bộ này là hoán vị của bộ kia thì vẫn tính là 2 bộ, ví dụ (1,2,3) và (2,1,3) là hai bộ khác nhau)

Input, Output và Subtasks

Input: (BOBASO.inp)
  • Dòng đầu tiên chứa 2 số nguyên n và m (1\le n\le 2\cdot 10^3,1\le m\le 3\cdot 10^3)
  • Dòng thứ hai chứa n số nguyên không âm a_1,a_2,\dots,a_n (0\le a_i\le 10^9)
Output: (BOBASO.out)
  • Số nguyên duy nhất là số bộ ba số thỏa mãn yêu cầu
Subtasks
  • Subtask 1 (50\%): n\le 200
  • Subtask 2 (50\%): Không có ràng buộc gì thêm

Sample 1

Input (BOBASO.inp)
2 5
1 5
Output (BOBASO.out)
7
Note

Có 7 bộ ba là (1,1,5), (1,5,1), (1,5,5), (5,1,1), (5,1,5), (5,5,1), (5,5,5)

Sample 2

Input (BOBASO.inp)
10 3
1 2 3 4 5 6 7 8 9 10
Output (BOBASO.out)
657
Note

Có tất cả 657 bộ ba số thỏa mãn chia hết cho 3

Rút tiền (THTB ĐN 2023)

Sunlight

An có rất nhiều tiền trong ngân hàng Thụy sĩ, một hôm An cần rút một số tiền n (n\le 10^5), ngân hàng chỉ có k (k\le 10^3) loại mệnh giá lần lượt là a_1,a_2,\dots,a_k. Vì lý do đặc biệt nên An mong muốn số tờ tiền rút được là ít nhất.

Input, Output và Subtasks

Input: (TIEN.inp)
  • Dòng đầu tiên chứa 2 số nguyên dương n và k, trong đó n là số tiền cần rút, k là số loại tiền mệnh giá
  • Dòng thứ hai chứa k số nguyên dương a_1,a_2,\dots,a_k lần lượt là mệnh giá của các tờ tiền
Output: (TIEN.out)
  • Chứa một số nguyên dương duy nhất là số tiền ít nhất mà An rút được, nếu không thể in ra -1
Subtasks
  • Subtask 1 (20\%): k=2 và a_i khác nhau đôi một
  • Subtask 2 (30\%): k\le 10, n\le 100 và a_i khác nhau đôi một
  • Subtask 3 (50\%): Không có ràng buộc gì thêm

Sample 1

Input (TIEN.inp)
125 6
1 2 5 10 20 50
Output (TIEN.out)
4
Note

Số tờ tiền ít nhất có thể lấy là 4 tờ gồm 2 tờ mệnh giá 50, 1 tờ mệnh giá 20, 1 tờ mệnh giá 5

Sample 2

Input (TIEN.inp)
5 3
2 4 6
Output (TIEN.out)
-1
Note

Không có cách nào để các tờ tiền mệnh giá 2, 4, 6 tạo thành số tiền là 5 cho nên in ra -1

Mật khẩu (THTC2 ĐN 2023)

Sunlight

Nhằm bảo mật thông tin trao đổi, người gửi và người nhận thông tin có thể đặt ra các quy tắc để tìm ra mật khẩu. Hiếu muốn trao đổi mật khẩu với Hùng nên đặt ra quy tắc như sau: Hiếu gửi cho Hùng một xâu ký tự, mật khẩu được tìm bằng cách tính tổng các chữ số chẵn có trong xâu rồi ghép với chiều dài của xâu đó

Input, Output và Subtasks

Input: (MATKHAU.inp)
  • Gồm một dòng duy nhất chứa xâu ký tự có độ dài không quá 10^5 ký tự gồm các ký tự in hoa, in thường, ký tự số, khoảng trắng và các ký tự đặc biệt
Output: (MATKHAU.out)
  • Mật khẩu cần tìm

Sample 1

Input (MATKHAU.inp)
Tin hoc tre 2023
Output (MATKHAU.out)
416
Note

Tổng các chữ số chẵn là 2+2=4 và có chiều dài là 16 nên mật khẩu là 416

Độ cao nguyên tố (THTC2 ĐN 2023)

Sunlight

Số nguyên tố là số chỉ có đúng 2 ước là 1 và chính nó. Độ cao của 1 số là tổng các chữ số của số đó.

Với một số tự nhiên n cho trước, hãy đếm và liệt kê các số nguyên tố có giá trị không vượt quá n và có độ cao đúng bằng h

Input, Output và Subtasks

Input: (DOCAONT.inp)
  • Gồm 2 số nguyên lần lượt là n và h (1\le n\le 5\cdot 10^6,1\le h\le 58) cách nhau 1 khoảng trắng
Output: (DOCAONT.out)
  • Gồm nhiều dòng, mỗi dòng là 1 số nguyên tố thỏa mãn yêu cầu của bài toán theo thứ tự tăng dần. Dòng cuối cùng ghi số lượng số nguyên tố vừa liệt kê
Subtasks
  • Subtask 1 (40\%): 1\le n\le 10^3
  • Subtask 2 (40\%): 10^3<n\le 10^5
  • Subtask 3 (20\%): Không có ràng buộc gì thêm

Sample 1

Input (DOCAONT.inp)
100 16
Output (DOCAONT.out)
79
97
2
Note

Có tất cả 2 số nguyên tố nhỏ hơn hoặc bằng 100 thỏa mãn tổng các chữ số của nó bằng 16 là 79 và 97

Trò chơi bốc bóng (THTC2 ĐN 2023)

Sunlight

Tại hội trại của trường THPT ABC, ban tổ chức hộ trại tổ chức trò chơi có tên "Bốc bóng". Trong trò chơi này ban tổ chức xếp n quả bóng thành một hàng ngang, các quả bóng được đánh số thứ tự từ 1 đến n (theo thứ tự từ trái sang phải). Trên mỗi quả bóng trong n quả bóng ban tổ chức ghi lên trên đó một con số bất kỳ, quả bóng thứ i được ghi lên con số có giá trị a_i\ (i=1,2,\dots,n). Trong trò chơi này ban tổ chức yêu cầu các đội chơi được chọn và bốc ra khỏi hàng 0 hoặc một số quả bóng liên tiếp ở đầu, hoặc cuối hoặc cả hai đầu của hàng bóng sao cho thỏa mãn các điều kiện sau:

  • Số quả bóng còn lại trên hàng không nhỏ hơn k
  • Trung bình của các con số được ghi trên các quả bóng còn lại trên hàng là lớn nhất

Đội chơi giành được chiến thắng là đội chơi có cách bốc bóng sao cho thỏa mãn được tất cả các yêu cầu trên của ban tổ chức

Yêu cầu: Em hãy đóng vai trò là 1 người chơi tham gia trong trò chơi này, hãy tìm cách bốc bóng sao cho giành được chiến thắng về cho đội của mình nhé.

Input, Output và Subtasks

Input: (BOCBONG.inp)
  • Dòng đầu chứa 2 số nguyên n, k (1\le k\le n\le 2\cdot 10^5) lần lượt là số quả bóng và số quả bóng tối thiểu còn lại sau khi bốc
  • Dòng thứ hai chứa n số nguyên a_1,a_2\dots,a_n (|a_i|\le 10^9, 1\le i\le n) lần lượt là các số được ghi trên mỗi quả bóng, các số được phân tách nhau bởi dấu cách
Output: (BOCBONG.out)
  • Một số thực duy nhất là giá trị trung bình của các quả bóng còn lại, làm tròn 3 chữ số thập phân sau dấu phẩy
Subtasks
  • Subtask 1 (20\%): n\le 400,k=1
  • Subtask 2 (20\%): 1<k\le n\le 400
  • Subtask 3 (30\%): 1<k\le n\le 5\cdot 10^3
  • Subtask 4 (30\%): Không có ràng buộc gì thêm

Sample 1

Input (BOCBONG.inp)
6 1
2 -1 8 8 8 -7
Output (BOCBONG.out)
8.000
Note

Bốc 2 quả bóng có giá trị 2, -1 ở đầu dãy và quả bóng có giá trị -7 ở cuối dãy để giá trị trung bình còn lại lớn nhất

Sample 2

Input (BOCBONG.inp)
5 3
6 -3 6 9 -8
Output (BOCBONG.out)
4.500
Note

Bốc quả bóng có giá trị -8 ở cuối dãy để giá trị trung bình còn lại lớn nhất

Cộng một kiểu Đức (THTC2 ĐN 2023)

Sunlight

Đức vừa phát minh ra một phép toán cộng độc đáo và đặt tên cho nó là "cộng một kiểu Đức", cách cộng như sau: Mỗi lần cộng một số nguyên cho một thay vì tăng giá trị của số đó lên một đơn vị Đức lại tăng tất cả các chữ số của nó lên một đơn vị

VD1: 15 "cộng một kiểu Đức" sẽ cho kết quả là 26

VD2: 91 "cộng một kiểu Đức" sẽ cho kết quả là 102

Yêu cầu: Với T số nguyên dương N cho trước hãy tính toán và cho biết sau khi thực hiện K lần phép cộng một kiểu Đức thì kết quả sinh ra có bao nhiêu chữ số. Vì câu trả lời có thể rất lớn do đó hãy in ra kết quả sau khi mod\ 10^9+7

Input, Output và Subtasks

Input: (CONG.inp)
  • Dòng thứ nhất chứa số nguyên T (1\le T\le 2\cdot 10^5)
  • T dòng tiếp theo, mỗi dòng chứa 2 số nguyên lần lượt là N và K (1\le N\le 10^9,1\le K\le 2\cdot 10^5)
Output: (CONG.out)
  • Với mỗi trường hợp in ra số lượng chữ số của kết quả chia lấy dư cho 10^9+7
Subtasks
  • Subtask 1 (30\%): T\le 10,K\le 20
  • Subtask 2 (20\%): T\le 100,K\le 50
  • Subtask 3 (50\%): Không có ràng buộc gì thêm

Sample 1

Input (CONG.inp)
2
9812 2
9899 3
Output (CONG.out)
6
8
Note

9812\rightarrow 10923\rightarrow 211034
9899\rightarrow 1091010\rightarrow 21102121\rightarrow 32213232

Software (OLP 30/4 2023)

Sunlight

Tâm rất yêu thích lập trình tạo phần mềm. Vào dịp rảnh rỗi Tâm đã thiết kế một phần mềm đơn giản. Màn hình phần mềm gồm N địa điểm (đánh số từ 1 đến N), trong đó mỗi địa điểm có đặt một bóng đèn ở trạng thái sáng hoặc tắt. Có N-1 con đường một chiều nối trực tiếp giữa các cặp điểm. Mỗi lần Tâm chạm tay vào một địa điểm X_i bất kỳ trên màn hình thì sẽ có một robot xuất phát từ địa điểm X_i di chuyển theo các con đường một chiều, cuối cùng kết thúc ở địa điểm 1. Robot không thay đổi trạng thái đèn ở địa điểm X_i và địa điểm 1, các địa điểm còn lại robot đã đi qua thì đèn ở địa điểm đó sẽ thay đổi sang trạng thái ngược lại (sáng thành tắt, tắt thành sáng)

Yêu cầu: Hãy cho biết khi Tâm thực hiện K lần chạm tay (mỗi lần chạm tay vào một địa điểm) thì sau đó sẽ có bao nhiêu địa điểm có đèn sáng. Biết rằng robot xuất phát từ địa điểm bất kỳ luôn có thể di chuyển theo các con đường một chiều đến địa điểm 1

Input, Output và Subtasks

Input: (SOFTWARE.inp)
  • Dòng đầu tiên gồm 2 số nguyên dương N và K lần lượt là số địa điểm, số lần chạm tay (1\le N,K\le 10^5)
  • Dòng thứ hai gồm N số nguyên cho biết trạng thái đèn ở N địa điểm, lần lượt theo thứ tự từ địa điểm 1 đến N. Trạng thái đèn tắt là 0, sáng là 1
  • Dòng thứ i trong N-1 dòng tiếp theo gồm 2 số nguyên dương A_i và B_i (1\le A_i,B_i\le N) cho biết có con đường một chiều nối trực tiếp từ địa điểm A_i đến B_i
  • Dòng cuối cùng gồm K số nguyên dương, trong đó số nguyên thứ i là X_i (1\le X_i\le N) cho biết địa điểm thứ i mà Tâm thực hiện chạm tay
Output: (SOFTWARE.out)
  • Số nguyên duy nhất là kết quả cần tìm
Subtasks
  • Subtask 1 (50\%): 1\le N,K\le 5000
  • Subtask 2 (50\%): Không có ràng buộc gì thêm

Sample 1

Input (SOFTWARE.inp)
5 3
1 0 0 0 0
2 1
4 2
3 2
5 4
4 5 4
Output (SOFTWARE.out)
3
Note

Tâm chạm tay 3 lần:

  • Lần 1 ở địa điểm 4: robot đi qua các địa điểm 4,2,1 và thay đổi trạng thái đèn ở địa điểm 2
    Kết quả trạng thái 5 đèn theo thứ tự lần lượt là: 1 1 0 0 0
  • Lần 2 ở địa điểm 5: robot đi qua các địa điểm 5,4,2,1 và thay đổi trạng thái đèn ở địa điểm 4,2
    Kết quả trạng thái 5 đèn theo thứ tự lần lượt là: 1 0 0 1 0
  • Lần 3 ở địa điểm 4: robot đi qua các địa điểm 4,2,1 và thay đổi trạng thái đèn ở địa điểm 2
    Kết quả trạng thái 5 đèn theo thứ tự lần lượt là: 1 1 0 1 0

Sau 3 lần chạm tay, có 3 địa điểm có đèn sáng là địa điểm 1, 2 và 4

Sample 2

Input (SOFTWARE.inp)
4 1
0 0 0 0
3 1
2 3
4 2
4
Output (SOFTWARE.out)
2

Số cách đi quân mã (OLP 30/4 2023)

Sunlight

Xét một bàn cờ vua có kích thước m \times n có m hàng n cột.

Các hàng được đánh số từ 1 đến m và các cột được đánh số từ 1 đến n.

Một quân mã xuất phát từ một ô trên bàn cờ có thể đi đến một trong bốn ô như hình vẽ.

Ngoài ra, trên bàn cờ có k ô mà quân mã không được phép đi vào. Những ô này được gọi là những ô bị cấm.

Yêu cầu: Tìm số cách di chuyển của quân mã từ ô (x, y) đến ô (m, n).

Input, Output và Subtasks

Input: (SOCACH.inp)
  • Dòng đầu ghi 4 số nguyên dương m, n, k, Q (1 < m, n \le 1000; 0 \le k \le 10; Q \le 10^5).
  • Trên k dòng tiếp theo, mỗi dòng ghi hai số nguyên k_{x_i}, k_{y_i} cho biết ô (k_{x_i}, k_{y_i}) bị cấm.
  • Trên Q dòng tiếp theo, mỗi dòng ghi hai số nguyên dương x_i, y_i.

Các số ghi trên một dòng cách nhau ít nhất một khoảng trắng.

Output: (SOCACH.out)
  • Gồm Q số nguyên W_i, mỗi số trên một dòng cho biết số cách di chuyển quân mã từ ô (x_i, y_i) cho trước đến ô (m, n).
  • Trong đó, số nguyên W_i là phần dư của phép chia số cách di chuyển quân mã từ ô (x_i, y_i) cho trước đến ô (m, n) cho 10^9.
Subtasks
  • Subtask 1 (30\%): n, m \le 100, k = 0, Q \le 10^2.
  • Subtask 2 (20\%): n, m \le 100, 0 < k \le 10, Q \le 10^2.
  • Subtask 3 (50\%): Không có giới hạn gì thêm.

Sample

Input (SOCACH.inp)
4 5 1 3
2 4
1 2
3 3
2 4
Output (SOCACH.out)
1
1
0
Note
  • No note.

Cây tìm kiếm nhị phân tối ưu

haiender288

Cây nhị phân tìm kiếm (Binary Search Tree – BST) trên tập n khóa số nguyên là một cây nhị phân thỏa mãn: Mỗi nút chứa đúng một khóa và khóa trong một nút lớn hơn mọi khóa trong nhánh con trái và nhỏ hơn mọi khóa trong nhánh con phải. Có nhiều cấu trúc BST để biểu diễn một tập các khóa. Như hình dưới đây là hai BST biểu diễn tập các khóa \{1,2,3,4,5,6\}.

Quá trình tìm kiếm một giá trị x trên BST thực hiện như sau: Bắt đầu từ nút gốc, tại mỗi bước, x được so sánh với khóa tại nút đang đứng (y):

  • Nếu x=y, quá trình tìm kiếm kết thúc, kết luận x có trong BST
  • Nếu x<y, đi sang nhánh con trái và quá trình tìm kiếm tiếp tục trong cây con trái bằng cách tương tự
  • Nếu x>y, đi sang nhánh con phải và quá trình tìm kiếm tiếp tục trong cây con phải bằng cách tương tự

Nếu tại một bước nào đó, thuật toán không thể đi tiếp được theo luật trên, quá trình tìm kiếm dừng và kết luận x không có trong BST.
Chi phí một phép tìm kiếm giá trị x bằng số phép so sánh khóa được thực hiện trong thuật toán. Như ở hình trên, để tìm khóa 3 trong cây (a) ta cần 3 phép so sánh trong khi đó để tìm khóa 3 trong cây (b) ta chỉ cần 2 phép so sánh.
Yêu cầu: Cho n khóa đánh số từ 1 tới n theo thứ tự tăng dần của các khóa, biết rằng người ta thực hiện c_i lần phép tìm kiếm khóa i trên cấu trúc BST biểu diễn tập khóa này (\forall i = 1,2,...,n). Hãy tìm cấu trúc BST sao cho tổng chi phí các phép tìm kiếm là nhỏ nhất.

Input, Output

Input: (OPTBST.inp)
  • Dòng 1 chứa số nguyên dương n\leq 2000
  • Dòng 2 chứa n số nguyên không âm c_1,c_2,...,c_n cách nhau bởi dấu cách (\forall i: c_i\leq 10^9)
Output: (OPTBST.out)
  • Ghi ra một số nguyên duy nhất là tổng chi phí (tính bằng số phép so sánh khóa được thực hiện) trên cấu trúc BST tìm được

Sample

Input (OPTBST.inp)
6
4 9 5 1 3 2 
Output (OPTBST.out)
48

Đa giác

haiender288

Cho đa giác lồi gồm n đỉnh và m đường chéo. Biết rằng nếu hai đường chéo khác nhau chỉ có thể gặp nhau tại đỉnh của đa giác. Các đỉnh của đa giác được đánh số từ 1 tới n theo một hoán vị nào đó.
Yêu cầu: Cho biết danh sách n cạnh và m đường chéo, hãy liệt kê các đỉnh của đa giác theo đúng thứ tự tạo thành đa giác đã cho.

Input, Output

Input: (POLYGON.inp)
  • Dòng 1 chứa hai số nguyên không âm n, m\leq 10^5 (n\geq 3).
  • n+m dòng tiếp theo, mỗi dòng chứa hai số nguyên dương i, j cho biết có đường chéo hoặc cạnh nối từ đỉnh i tới đỉnh j.
Output: (POLYGON.out)
  • Ghi ra một dòng liệt kê dãy các đỉnh của đa giác. Bởi có nhiều cách liệt kê đỉnh xác định đa giác đã cho, cần đưa ra dãy có thứ tự từ điển nhỏ nhất

Sample

Input (POLYGON.inp)
4 1
1 2
1 3
1 4
2 3
2 4 
Output (POLYGON.out)
1 3 2 4