Contest Python Training
[Python_Training] Tổng đơn giản
Nộp bài- Cho số nguyên dương \(n\). Tính tổng \(S=\sum\limits_{i=1}^{n} i=1+2+...+n\)
Input
- Một dòng duy nhất chứa số nguyên dương \(n(1\le n\le 100)\)
Output
- In ra \(S\) cần tìm
Example
Test 1
Input
4
Output
10
Note
Giải thích: \(S=1+2+3+4=10\)
[Python_Training] Đếm cặp đơn giản
Nộp bài- Cho số nguyên dương \(n\). Hỏi có bao nhiêu cặp số nguyên dương \((a,b)(a,b\in \mathbb{N}^{*})\) thỏa mãn \(a+b=n\) và \(a>b\)
Input
-
Dòng đầu tiên chứa số nguyên \(T(1\le T\le 10^4)\) - Thể hiện số testcase.
-
\(T\) dòng tiếp theo, mỗi dòng chứa số nguyên dương \(n(1\le n\le 2.10^9)\)
Output
- Ứng với mỗi testcase, in ra đáp án tương ứng.
Example
Test 1
Input
3
1
2
3
Output
0
0
1
Note
Giải thích: Ứng với \(n=1\) và \(n=2\). Không có cặp \((a,b)(a,b\in \mathbb{N}^{*})\) nào thỏa mãn nên đáp án là \(0\). Còn ứng với \(n=3\), có một cặp duy nhất thỏa mãn đó là \((2,1)\)
[Python_Training] Khoảng cách đơn giản
Nộp bài-
Cho \(3\) điểm \(X,A,B\) lần lượt nằm trên trục \(Ox\) và có tọa độ lần lượt là \(x,a,b\).
-
Hỏi giữa \(A\) và \(B\) điểm nào gần \(X\) hơn (Đề ra đảm bảo rằng, khoảng cách từ \(A\) đến \(X\) khác khoảng cách từ \(B\) đến \(X\)).
Input
- Dòng thứ nhất chứa ba số nguyên dương \(x,a,b(1\le x,a,b\le 1000)\).
Output
- In ra \(A\) nếu \(A\) gần \(X\) hơn \(B\). Ngược lại in ra \(B\).
Example
Test 1
Input
5 7 2
Output
A
[Python_Training] Giá trị nhỏ nhất đơn giản
Nộp bài- Cho \(3\) số nguyên dương \(a,b,c\). Đặt \(S=min\left\{a+b,b+c,c+a\right\}\), xuất \(S\) ra màn hình.
Input
- Dòng thứ nhất chứa \(3\) số nguyên dương \(a,b,c(1\le a,b,c\le 10000)\)
Output
- In ra \(S\) cần tìm.
Example
Test 1
Input
2 5 6
Output
7
[Python_Training] Xâu chẵn đơn giản
Nộp bài-
Cho xâu \(S\) chỉ gồm các kí tự chữ cái thường (\('a'...'z'\)).
-
Xâu \(S\) được gọi là xâu "chẵn" nếu số lần xuất hiện của từng chữ cái trong xâu \(S\) là số chẵn.
Input
- Một dòng duy nhất chứa xâu \(S(1\le |S|\le 100)\)
Output
- In ra "Yes" nếu \(S\) là xâu "chẵn", ngược lại in ra "No".
Example
Test 1
Input
aea
Output
No
Note
Giải thích: Vì số lần xuất hiện của kí tự \('e'\) trong xâu trên là số lẻ.
[Python_Training] Những chiếc lá của Henry
Nộp bài-
Henry có \(N\) chiếc lá. Trên chiếc lá thứ \(i(1\le i\le N)\) có ghi một số \(x_i\).
-
Anh ấy có thể chọn \(1\) hoặc nhiều chiếc lá từ \(N\) chiếc lá này sao cho giá trị trung bình của những con số ghi trên những chiếc lá đó bằng một số \(A\) cho trước. Hỏi anh ấy có bao nhiêu cách để thực hiện nhiệm vụ trên ?
Input
-
Dòng thứ nhất chứa hai số nguyên \(N,A(1\le N,A\le 50)\).
-
Dòng thứ hai chứa \(N\) số nguyên \(x_i(1\le x_i\le 50)\) - Thể hiện những con số ghi trên những chiếc lá !
Output
- In ra đáp án cần tìm.
Example
Test 1
Input
3 3
1 5 5
Output
2
Note
Giải thích: Có hai cách để \(Henry\) có thể hoàn thành nhiệm vụ đó là:
-
Cách \(1\) : Chọn chiếc là thứ \(1\) và chiếc lá thứ \(2\).
-
Cách \(2\) : Chọn chiếc là thứ \(1\) và chiếc lá thứ \(3\).
Diện tích, chu vi
Nộp bàiCho hình chữ nhật có chiều dài và chiều rộng lần lượt là \(7.8\) và \(6.4\). Bạn hãy viết chương trình hiển thị ra màn hình thông tin sau:
Output
DT = {P1}
CV = {P2}
Với {P1}
và {P2}
lần lượt là diện tích và chu vi của hình chữ nhật cho trước.
Phép toán 2
Nộp bàiBạn hãy viết chương trình hiển thị ra màn hình tổng, hiệu, tích và thương của \(2468\) và \(1234\) giống như sau:
Output
2468 + 1234 = {P1}
2468 - 1234 = {P2}
2468 * 1234 = {P3}
2468 // 1234 = {P4}
- Với
{P1}
là tổng của \(2468\) và \(1234\). - Với
{P2}
là hiệu của \(2468\) và \(1234\). - Với
{P3}
là tích của \(2468\) và \(1234\). - Với
{P4}
là thương của \(2468\) và \(1234\).
Lý thuyết
Như bài trước bạn đã biết, để hiển thị ra màn hình một chuỗi ký tự 2468 + 1234 =
bạn có thể làm như sau:
Code
print("2468 + 1234 =")
Để hiển thị ra màn hình tổng của \(2468\) và \(1234\) bạn có thể làm như sau:
Code
print(2468 + 1234)
Vậy để hiển thị được ra màn hình 2468 + 1234 = {P1}
với {P1}
là tổng của \(2468\) và \(1234\) thì bạn cần kết hợp được hai câu lệnh trên giống như chương trình sau:
Code
print("2468 + 1234 =", 2468 + 1234)
Kết quả khi chạy chương trình:
Output
2468 + 1234 = 3702
Lưu ý: Nếu bạn thêm khoảng trắng vào sau dấu =
trong ví dụ trên thì kết quả sẽ sai do thừa 1 khoảng trắng (hàm print()
sẽ tự động thêm vào một khoảng trắng với mỗi một tham số mới). Ví dụ:
Code
print("2468 + 1234 = ", 2468 + 1234)
Kết quả khi chạy chương trình:
Output
2468 + 1234 = 3702
Phép toán 1
Nộp bàiBạn hãy viết chương trình Python hiển thị ra màn hình kết quả của các phép toán:
343 + 43
343 - 43
343 * 43
343 / 43
343 // 43
343 % 43
Chú thích
- Phép tính
a / b
trong Python tương ứng với phép chia hai số thực trong các ngôn ngữ khác - Phép tính
a // b
là chia nguyên (trong C++ thì//
là comment)
Lý thuyết
Để hiển thị ra màn tổng của hai số trong ngôn ngữ lập trình Python rất đơn giản, bạn chỉ cần dùng hàm print()
với toán tử +
.
Ví dụ về chương trình dùng để tính tổng của \(12\) và \(15\):
Code
print(12 + 15)
Kết quả khi chạy chương trình:
Output
27
Lưu ý: khi sử dụng hàm print()
để thực hiện một phép toán bạn không được sử dụng cặp dấu nháy đôi ""
như ở các bài trước, vì nếu sử dụng cặp dấu nháy đôi này thì chương trình sẽ hiểu đó là một chuỗi các ký tự chứ không phải một phép toán. Ví dụ chương trình sau:
Code
print("12 + 15")
Kết quả khi chạy chương trình:
Output
12 + 15
Các em có nhận xét gì về kết quả của phép của các phép toán
Cây thông dấu sao 2
Nộp bàiIn ra hình vẽ sau:
Output
*
* *
* *
* *
* *
***********
*
*
*
Cây thông dấu sao
Nộp bàiIn ra hình vẽ sau:
Output
*
***
*****
*******
*********
***********
*
*
*
Hình chữ nhật dấu sao
Nộp bàiIn ra hình vẽ sau:
Output
**********
**********
**********
[Python_Training] Chi phí thấp nhất
Nộp bàiHenry có \(N\) số nguyên \(a_1,a_2,...,a_N\). Mục tiêu của anh ta là làm cho \(N\) số nguyên này bằng nhau thông qua phép biến đổi sau:
- Chọn một số nguyên \(x\) bất kì từ \(N\) số trên và biến số đó thành số nguyên \(y\) với chi phí là \((x-y)^2\) VND (Việt Nam Đồng). (Biết rằng, mỗi số chỉ được chọn không quá \(1\) lần)
Yêu cầu: Tìm tổng chi phí thấp nhất để Henry có thể thực hiện được mục tiêu trên.
Input
- Dòng thứ nhất chứa số nguyên \(N(1\le N\le 100)\)
- Dòng thứ hai chứa \(N\) số nguyên \(a_1,a_2,...,a_N(-100\le a_i\le 100)\)
Output
- In ra tổng chi phí thấp nhất cần tìm.
Example
Test 1
Input
3
1 1 3
Output
3
Note
Giải thích: Anh ấy sẽ đưa tất cả các số trên về giá trị \(2\), do đó tổng chi phí là: \((1-2)^2+(1-2)^2+(3-2)^2=3\)
[Python_Training] Số lần biến đổi ít nhất
Nộp bài-
Cho \(3\) số nguyên \(A,B,C\). Tìm số lần biến đổi tối thiểu để làm cho ba số này bằng nhau bằng cách thực hiện những phép biến đổi sau theo thứ tự bất kì:
-
Phép biến đổi 1: Chọn \(2\) trong \(3\) số \(A,B,C\) và tăng chúng lên \(1\) đơn vị.
-
Phép biến đổi 2: Chọn \(1\) trong \(3\) số \(A,B,C\) và tăng số đó lên \(2\) đơn vị.
Input
- Dòng thứ nhất chứa \(3\) số nguyên \(A,B,C(0\le A,B,C\le 50)\)
Output
- In ra số phép biến đổi tối thiểu cần tìm.
Example
Test 1
Input
2 5 4
Output
2
Note
- Thực hiện phép biến đổi \(1\): Tăng \(A,C\) lên \(1\) đơn vị. Sau đó thực hiện phép biến đổi \(2\), tăng \(A\) lên \(2\) đơn vị
[Python_Training] Chi phí thấp nhất 2
Nộp bàiHenry có \(N\) số nguyên \(a_1,a_2,...,a_N\). Mục tiêu của anh ta là làm cho \(N\) số nguyên này bằng nhau thông qua phép biến đổi sau:
- Chọn một số nguyên \(x\) bất kì từ \(N\) số trên và biến số đó thành số nguyên \(y\) với chi phí là \((x-y)^2\) VND (Việt Nam Đồng). (Biết rằng, mỗi số chỉ được chọn không quá \(1\) lần)
Yêu cầu: Tìm tổng chi phí thấp nhất để Henry có thể thực hiện được mục tiêu trên.
Input
- Dòng thứ nhất chứa số nguyên \(N\)
- Dòng thứ hai chứa \(N\) số nguyên \(a_1,a_2,...,a_N\)
Output
- In ra tổng chi phí thấp nhất cần tìm.
Scoring
- Subtask \(1\) \((30\%)\): \(N \leq 10^2\), \(-10^2 \leq a_i \leq 10^2\).
- Subtask \(2\) \((70\%)\): \(N \leq 10^4\), \(-10^9 \leq a_i \leq 10^9\).
Example
Test 1
Input
3
1 1 3
Output
3
Note
Giải thích: Anh ấy sẽ đưa tất cả các số trên về giá trị \(2\), do đó tổng chi phí là: \((1-2)^2+(1-2)^2+(3-2)^2=3\)
[Python_Training] Mảng con kì diệu
Nộp bài-
Cho mảng \(A\) gồm \(n\) số nguyên dương.
-
Một mảng con (gồm những phần tử liên tiếp) của mảng \(A\) gọi là "kì diệu" nếu mỗi số nguyên trong đoạn con đó xuất hiện đúng \(3\) lần.
Yêu cầu: Đếm số lượng mảng con "kì diệu" có trong \(A\).
Input
-
Dòng thứ nhất chứa số nguyên \(n(1\le n\le 5.10^5)\)
-
Dòng thứ hai chứa \(n\) số nguyên \(a_1,a_2,...,a_n\) với \(1\le a_i\le n\text{ } \forall i=\overline{1,n}\)
Output
- In ra đáp án cần tìm.
Example
Test 1
Input
8
1 2 3 3 3 2 2 1
Output
2
Note
Giải thích: Các đoạn con "kì diệu" đó là: \([3,3,3],[2,3,3,3,2,2]\)
[Python_Training] Sàng nguyên tố
Nộp bàiBạn có một số nguyên dương \(N\). Nhiệm vụ của bạn là xuất ra tất cả các số nguyên tố từ \(1\) tới \(N\).
Input
- Gồm một dòng duy nhất chứa số nguyên \(N\) (\(N \leq 10^6)\).
Output
- Xuất ra tất cả các số nguyên tố từ \(1\) tới \(N\) trên cùng một dòng và cách nhau một dấu cách.
Example
Test 1
Input
10
Output
2 3 5 7
[Python_Training] Bài toán AFC
Nộp bài- Cho \(3\) số nguyên \(A,F,C\).
Yêu cầu: Tìm số \(B\) nhỏ nhất thỏa mãn những điều kiện sau:
- \(B>A\)
- Số lần xuất hiện chữ số \(C\) trong \(B\) đúng bằng \(F\)
Input
- Một dòng duy nhất chứa \(3\) số nguyên \(A,F,C(1\le A\le 10^{17}-1 ; 1\le F\le 17 ; 0\le C\le 9)\)
Output
- In ra số \(B\) cần tìm
Example
Test 1
Input
7 1 7
Output
17
Test 2
Input
12 2 1
Output
101
[Python_Training] Bài toán cấp phát mảng động
Nộp bài-
Cho một mảng ban đầu rỗng và có sức chứa tối đa là \(C\).
-
Cho \(N\) phần tử có giá trị bằng nhau.
-
Tiếp theo, ta lặp lại quá trình dưới đây cho đến khi \(N\) phần tử được đưa hết vào mảng thì dừng:
-
Nếu mảng chưa bị tràn, thêm vào mảng một phần tử, việc này tốn \(1\)VND (Việt Nam Đồng)
-
Nếu mảng bị tràn, thay mảng cũ bằng mảng mới có sức chứa gấp đôi mảng cũ, việc này không tốn chi phí
-
Sao chép từng phần tử của mảng cũ sang mảng mới, mỗi phần tử tốn \(1\) VND
Để hiểu rõ hơn quá trình trên, ta có thể xem ví dụ dưới đây:
- Giả sử ta có \(C=1\) và \(N=3\), khi đó quá trình sẽ diễn ra như sau:
Hành động | Sức chứa | Số lượng phần tử hiện tại | Chi phí |
---|---|---|---|
Bắt đầu | C = 1 | 0 | 0 |
Thêm | C = 1 | 1 | 1 |
Thêm | Tràn mảng | ||
Đổi mảng | C = 2 | 0 | 0 |
Sao chép | C = 2 | 1 | 1 |
Thêm | C = 2 | 2 | 1 |
Thêm | Tràn mảng | ||
Đổi mảng | C = 4 | 0 | 0 |
Sao chép | C = 4 | 2 | 2 |
Thêm | C = 4 | 3 | 1 |
Vậy tổng chi phí để đưa \(N\) phần tử vào mảng là \(1+1+1+2+1=6\) VND
Yêu cầu: Cho hai số \(C\) và \(N\). In ra tổng chi phí để đưa \(N\) phần tử vào mảng.
Input
- Một dòng duy nhất chứa hai số nguyên \(C,N(1\le C\le 1000,0\le N\le 5.10^8)\)
Output
- In ra kết quả cần tìm
Example
Test 1
Input
1 3
Output
6
[Python_Training] Vết của ma trận
Nộp bài-
Cho ma trận \(A\) có kích thước \(n\text { x }n\) với \(n\in \mathbb{N}^{*}\)
-
Vết của ma trận \(A\) có kí hiệu là \(tr(A)\) và được định nghĩa như sau: \(tr(A)=\sum\limits_{i=1}^{n}A[i][i]\) (tổng các phần tử trên đường chéo chính).
Xét tất cả các ma trận vuông con (của ma trận \(A\)) có kích thước \(k\text{ x }k\) (bằng cách bỏ đi một số hàng( hoặc không bỏ hàng nào) và một số cột (hoặc không bỏ cột nào) của ma trận \(A\) ) với \(1\le k\le n\), hãy tìm ma trận con có vết lớn nhất và in giá trị đó ra màn hình.
Input
-
Dòng thứ nhất chứa hai số nguyên \(n,k(1\le n\le 50;1\le k\le n)\)
-
\(n\) dòng tiếp theo, mỗi dòng là một chuỗi gồm \(n\) kí tự số (\('0'..'9'\))
Output
- In ra kết quả thỏa mãn yêu cầu bài toán.
Example
Test 1
Input
3 3
123
456
789
Output
15
Note
Test 2
Input
5 3
12689
55555
55555
55555
55555
Output
16
Note
Test 3
Input
3 2
233
111
233
Output
6
Note
Giải thích: Ở ví dụ 3, ta bỏ đi hàng \(2\) và cột \(1\). Ta sẽ còn lại ma trận con \(2\times 2\) có vết lớn nhất là \(6\). Còn ở ví dụ \(4\), ta bỏ đi các cột \(1,2\) và các hàng \(2,4\). Khi đó ta thu được ma trận \(3\times 3\) có vết lớn nhất là \(9\)
Test 4
Input
5 3
23333
11111
23333
11111
23333
Output
9
Note
[Python_Training] XOR và AND
Nộp bài- Henry có một mảng gồm \(n\) số nguyên dương. Nhiệm vụ của anh ấy là phải chèn vào giữa các phần tử kề nhau \(1\) phép toán \(XOR\) (kí hiệu ^) hoặc phép toán \(AND\) (kí hiệu \(\And\)) sao cho kết quả thu được đạt giá trị lớn nhất, và in giá trị đó ra màn hình.
Input
-
Dòng thứ nhất chứa số nguyên \(n(1\le n\le 10)\)
-
Dòng thứ hai chứa \(n\) số nguyên \(a_1,a_2,...,a_n\) với \(1\le a_i\le 1000 \text{ } \forall 1\le i\le n\)
Output
- In ra giá trị cần tìm
Example
Test 1
Input
3
42 27 38
Output
44
Note
Giải thích: Đối với ví dụ này, cách đặt: \(42 \And 27\) ^ \(38\) sẽ cho giá trị lớn nhất đó là \(44\)
[Python_Training] s và t
Nộp bàiCó một tấm thẻ trên bàn, và bau đầu có một số \(s\) được viết trên nó, ở mỗi bước bạn có thể thực hiện \(1\) trong \(2\) phép toán sau:
-
Giả sử số ghi trên tấm thẻ là \(x\), thì thay nó bằng \(2 * x+1\)
-
Giả sử số ghi trên tấm thẻ là \(x\), thì thay nó bằng \(3 * x+1\)
Hỏi chúng ta cần thực hiện ít nhất bao nhiêu phép toán trên để thu được được số \(t\). Nếu không thể biến đổi \(s\) thành \(t\) in ra \(-1\).
Input
-
Dòng thứ nhất chứa số \(T(1\le T\le 30\)) - Thể hiện số testcase của bài toán
-
T dòng tiếp theo, mỗi dòng chứa hai số nguyên \(s,t(0\le s,t\le 10^6)\)
Output
- Ứng với mỗi testcase, in ra đáp án thỏa mãn yêu cầu bài toán
Example
Test 1
Input
2
1 3
3 15
Output
1
2
[Python_Training] Đếm lục giác
Nộp bàiBạn được cho độ dài 3 cạnh \(a,b,c\) như hình vẽ lần lượt thể hiện độ dài các cạnh của một hình lục giác lớn, và hình lục giác lớn này sẽ bao phủ các hình lục giác nhỏ. Hãy đếm xem tổng cộng có bao nhiêu hình lục giác nhỏ.
Input
- Dòng thứ nhất chứa số \(T\), thể hiện số testcase.
- \(T\) dòng tiếp theo, mỗi dòng chứa 3 số nguyên \(a,b,c\).
Output
- In ra \(T\) dòng, mỗi dòng tương ứng là kết quả của mỗi testcase.
Constraints
- \(1 \leq T \leq 500\)
- \(1 \leq a, b, c \leq 1000\)
Example
Test 1
Input
1
2 3 4
Output
18
[Python_Training] Đổi bit
Nộp bàiCho hai xâu \(S\) và \(T\) đều có độ dài là \(N\) và chỉ chứa hai ký tự là \(0\) và \(1\). Bạn có thể thực hiện trên xâu \(S\) phép toán sau với số lượng bất kỳ:
- Chọn chỉ số \(i(2\le i\le N)\) sao cho \(S[i]=1\) và thay thế \(S[i]=0\) và sau đó gán \(S[i-1]=1-S[i-1]\).
Chú ý: Chỉ số của xâu đánh từ số \(1\).
Hỏi: Ta có thể biến xâu \(S\) thành xâu \(T\) hay không ? Nếu có thì in ra số lượng phép toán tối thiểu cần dùng. Ngược lại, in ra \(-1\)
Input
-
Dòng thứ nhất chứa số \(t\) - Thể hiện số testcase
-
\(t\) block tiếp theo, mỗi block có dạng:
\(N\text{ }\)
\(S\text{ }\)
\(T\).
Với \(1\le N\le 5.10^5\).
Output
- Ứng với mỗi testcase, in ra đáp án cần tìm
Example
Test 1
Input
2
2
01
10
2
00
11
Output
1
-1
[Python_Training] Bật hay Tắt
Nộp bàiMột máy điều hóa chỉ được bật khi nhiệt độ ngoài trời \(X\) không nhỏ hơn 30. Bạn được cho một số nguyên \(X\), và phải kiểm tra xem ta có nên bật điều hòa hay không.
Input
- Dòng thứ nhất chứa một số nguyên dương \(T\), là số testcase.
- \(T\) dòng tiếp theo, mỗi dòng chứa 1 số nguyên \(X\).
Output
- Với mỗi testcase, hãy in ra
Yes
nếu ta nên bật máy điều hòa. Ngược lại hãy inNo
.
Constraints
- \(1 \leq T \leq 300\)
- \(-40 \leq X \leq 40\)
Example
Test 1
Input
2
30
25
Output
Yes
No