Changing seats

Link

Đề bài

An có một mảng gồm n số nguyên. Mỗi giây An có thể đổi chỗ hai phần tử cạnh nhau trong mảng. Sau một hồi đổi chỗ giữa các phần tử trong mảng, An chợt nghĩ rằng, ko biết sau một số lần hữu hạn đổi chỗ sẽ thu được một mảng mà hai phần tử liền kề là khác nhau hay ko ?

Bạn hãy giúp anh ấy.

Input
Dòng đầu tiên là số nguyên n (1 ≤ n ≤ 100) — số lượng các phần tử trong mảng. Dòng thứ 2 là n số nguyên a_1,a_2,…,a_n,(1 ≤ a_i ≤ 1000) — các phần tử của mảng.

Output
in ra YES nếu có thể, in ra NO nếu ngược lại.

Resource limits
Execution time: 2 seconds

Memory: 256.00 MB

Đáp án

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

import sys
import math

input_str = ""
number_of_line = 0
for line in sys.stdin:
number_of_line += 1
if number_of_line == 2:
arr = [int(i) for i in line.split()]
c = {}
max_high = math.ceil(len(arr)/2)
for i in arr:
if i in c:
c[i] += 1
else:
c[i] = 1
if c[i] > max_high:
print("NO")
exit()
print("YES")

The Puzzle Game

Link

Đề bài

Hồi nhỏ, Quy có 1 bộ xếp hình lego. Bộ gồm có nhiều mảnh, mỗi mảnh có chiều cao là 1 và có chiều dài cố định. Một mảnh có thể được ghép trên mảnh khác nếu như chúng có độ dài bằng nhau.

Quy muốn xây số ít nhất các tòa tháp từ tất cả các mảnh của bộ xếp hình. Bạn hãy giúp anh ý.

Input
Dòng 1 là số N (1 ≤ N ≤ 1000) số mảnh trong bộ xếp hình lego. Dòng 2 là N số nguyên dương, phân cách bởi dấu cách, chiều dài của các mảnh.

Output
Hai số, chiều cao của tháp cao nhất và tổng số tháp.

Resource limits
Execution time: 5 seconds

Memory: 256.00 MB

Đáp án

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

import sys

input_str = ""
number_of_line = 0
for line in sys.stdin:
number_of_line += 1
if number_of_line == 2:
arr = [int(i) for i in line.split()]
c = {}
max_high = 0
for i in arr:
if i in c:
c[i] += 1
else:
c[i] = 1
if c[i] > max_high:
max_high = c[i]
print(f'{max_high} {len(c)}')

Code Viblo Lighting game 4ldYJd5om28

Đề bài

Đây là một trò chơi nổi tiếng gồm có 1 lưới 3 × 3 bóng đèn. Lúc bắt đầu game thì tất cả các bóng đèn đều được bật. Ấn vào bất cứ bóng nào sẽ chuyển trạng thái của nó và các bóng xung quanh (đang bật sẽ thành tắt và ngược lại). Mục tiêu của trò chơi là làm sao tắt được hết tất cả các bóng đèn đi.

Sau 1 hồi say sưa chơi, An đã ấn mỗi bóng một số lần. Cho số lần mà An ấn mỗi bóng đèn. Bạn hãy in ra trạng thái của mỗi bóng.

Input
3 hàng, 3 cột, phân cách bởi dấu cách. Các số nguyên chính là số lần An đã ấn vào bóng ở vị trí đó (giá trị trong đoạn từ 0 đến 100).

Output
3 dòng, mỗi dòng 3 ký tự, trạng thái của lưới với quy định: “1” thể hiện bóng đang bật, “0” thể hiện bóng đang “tắt”.

Đáp án

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import sys


input_str = ""

count_line = 0
for line in sys.stdin:
count_line += 1
if count_line == 1:
b1, b2, b3 = [int(i) for i in line.split()]
elif count_line == 2:
b4, b5, b6 = [int(i) for i in line.split()]
else:
b7, b8, b9 = [int(i) for i in line.split()]


print(f'{(b1 + b2 + b4 +1) % 2}{(b1 + b2 + b3 + b5 +1) % 2}{(b2 + b3 + b6 +1) % 2}')
print(f'{(b1 + b4 + b5 + b7 +1) % 2}{(b2 + b4 + b5 + b6 + b8 +1) % 2}{(b3 + b5 + b6 + b9 +1) % 2}')
print(f'{(b4 + b7 + b8 +1) % 2}{(b5 + b7 + b8 + b9 +1) % 2}{(b6 + b8 + b9 +1) % 2}')

Code Viblo Sleepy

Link

Đề bài

Bình tỉnh dậy và thấy thời gian đang s trên đồng hồ điện tử. Ngoài ra Bình còn biết mình đã ngủ được khoảng thời gian là t.

Bạn hãy giúp anh Bình viết chương trình, nhập vào s và t đưa ra thời điểm p mà Bình lên giường đi ngủ. Chú ý là Bình có thể đi ngủ từ tối hôm qua.

Input
Dòng đầu là thời gian t theo format “hh:mm”, khoảng thời gian mà Bình đã ngủ. Hai thời gian này được đảm bảo là đúng, và đúng theo format 24-h: 00 ≤ hh ≤ 23, 00 ≤ mm ≤ 59.

Output
in ra thời điểm p mà Bình bắt đầu ngủ theo format như trên.

Resource limits
Execution time: 2 seconds

Memory: 256.00 MB

Lời giải

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import sys

input_str = ""
first = True

for line in sys.stdin:
if first:
first = False
sh = int(line.split(':')[0])
sm = int(line.split(':')[1])
else:
th = int(line.split(':')[0])
tm = int(line.split(':')[1])

if sm < tm:
sm += 60
sh -= 1
om = sm - tm

if sh < th:
sh += 24
oh = sh - th
print(f'{oh:02}:{om:02}')

Code Viblo Shooting Team

Link

Đề bài

Đội tuyển Counter Strike của Framgia có n thành viên. Với mỗi thành viên, ta đều biết họ đã tham gia vào giải đấu WCG bao nhiêu lần. Theo luật của WCG, mỗi người chơi chỉ có thể tham gia vào WCG tối đa là 5 lần.

Framgia đang có kế hoạch tập trung các thành viên thành một số team để tham gia vào WCG. Mỗi team cần có đúng 3 người, mỗi người ko thể là thành viên của 2 team trở lên. Vậy có thể lập tối đa là bao nhiêu team nếu trưởng đoàn muốn mỗi team tham gia vào WCG sao cho toàn thành viên của team có thể tham gia WCG ít nhất là k lần nữa.

Input
Dòng đầu là 2 số nguyên n và k (1 ≤ n ≤ 2000; 1 ≤ k ≤ 5). Dòng thứ hai là n số nguyên: y_1,y_2, … ,y_n (0 ≤ y_i  ≤ 5). với y_i là số lần người thứ i tham gia vào WCG

Output
Tổng nhỏ nhất sau khi thực hiện các hành động

Resource limits
Execution time: 2 seconds

Memory: 256.00 MB

Lời giải

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import sys

input_str = ""
first = True
for line in sys.stdin:
if first:
first = False
n = int(line.split(' ')[0])
k = int(line.split(' ')[1])
else:
arr = line.split(' ')
count = 0
for item in arr:
if (5 - int(item)) >= k:
count += 1
print(count//3)

Code Viblo Role Playing Game

Link

Đề bài

An bị mắc kẹt không thể nào vượt qua được ở một level của game The Lost Symbol. Anh ấy phải đạnh bại được tất cả n golem thì sẽ được qua level tiếp theo. Anh ấy và những con golem có chiều dài là một số nguyên. Trong cuộc đấu tay đôi giữa 2 đối thủ, ai có sức mạnh hơn thì sẽ tháng. Ban đầu sức mạnh của An là s.

Nêu anh ấy bắt đầu đấu tay đôi với golem thứ i (1 ≤ i ≤ n) và sức mạnh của anh ấy không lớn hơn sức mạnh của golem thứ i thì anh ấy sẽ thua và chết. Ngược lại, anh ấy đánh bại con golem và sẽ nhận thêm sức mạnh bằng y_i

Anh ấy có thể đánh những con golem theo bất kể thứu tự nào. Hãy xác định xem anh ấy có thể chuyển sang level tiếp theo hay không tức là phải đánh bại tất cả các con golem và không thua một lần nào.

Input
Dòng đầu tiên chứa 2 số nguyên s và n cách nhau bởi khoảng trống(1 ≤ s ≤ 10^4, 1 ≤ n ≤ 10^3).

n dòng tiếp theo : dòng i chứa x_i và y_i cách nhau bởi khoảng trống (1 ≤ x_ix ≤ 10^4, 0 ≤ y_i ≤ 10^4) - sức mạnh của con golem thứ i và điểm thưởng cho mỗi lần đánh bại chúng.

Output
In ra “YES” nếu An có thể sang được level tiếp theo và “NO” nếu anh ấy không thể.

Resource limits
Execution time: 2 seconds

Memory: 256.00 MB

Lời giải

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import sys

input_str = ""

first = True
golem = []
score = []

for line in sys.stdin:
if first:
first = False
s = int(line.split(' ')[0])
n = int(line.split(' ')[1])
else:
item_golem = line.split(' ')[0]
item_score = line.split(' ')[1]
golem += [int(item_golem)]
score += [int(item_score)]

ok = True
while len(golem) > 0:
ok = False
for i in range(len(golem)):
if s > golem[i]:
s += score[i]
del golem[i]
del score[i]
ok = True
break
if not ok:
print('NO')
break
if ok:
print('YES')

Code Viblo Ting Ting

Challenge Viblo

Đề nào

Ngày xửa ngày xưa, trong một lần đi dạo trên bãi biển, An vấp phải 1 chiếc đèn dầu cũ và bỗng nhiên thần đèn hiện ra và ban cho anh 1 điều ước. Điều ước đó là cho phép An được xóa đi chữ số cuối cùng hoặc chữ số trước chữ số cuối cùng trong tài khoản ngân hàng VCB của anh nhiều nhất là một lần. Ví dụ: nếu hiện tại tài khoản của An đang là -12000023, anh có thể dùng điều ước để chuyển account thành -1200002 hoặc -1200003.

Hãy giúp An dùng điều ước làm tối đa account nhất có thể.

Input
số nguyên n (10 ≤ |n| ≤ 10^9) — tài khoản hiện tại của An

Output
Tài khoản tối đa mà An có được sau khi dùng điều ước.

Resource limits
Execution time: 2 seconds

Memory: 256.00 MB

Lời giải

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import sys

input_str = ""

for line in sys.stdin:
n = int(line)
n_miss_last = int(line[:-1])
n_miss_before_last = int(line[:-2] + line[-1:])

if n >= 0:
input_str += line + '\n'
elif n_miss_last > n_miss_before_last:
input_str += str(n_miss_last) + '\n'
else:
input_str += str(n_miss_before_last) + '\n'

print(input_str)

Code Viblo The heirs

Link

Đề bài

Là fan cuồng của Kim Tan, Linh ko bỏ lỡ bất cứ tập phim The Heirs nào. Anh muốn xem phim ngay nhưng do mạng cùi, video bị giật do kích cỡ dữ liệu cần xem trên 1 giây lớn hơn kich cỡ dữ liệu tải xuống trên 1 giây. Để xem phim ko bị giật, Linh cần đợi 1 số nguyên giây rồi sau đó bắt đầu xem phim.

Giả sử video có chiều dài là c và Linh phải đợi t giây trước khi xem. Khi đó ở bất cứ thời điểm t0, t ≤ t0 ≤ c + t, điều kiện sau cần thỏa mãn: dữ liệu thu được trong t0 phải ko ít hơn lượng dữ liệu cần đển xem t0 - t giây.

Linh muốn xem càng sớm càng tốt, hãy giúp anh ấy xác định số giây cần đợi ít nhất.

Input
3 số nguyên ngăn cách bởi dấu cách: a, b, c (1 ≤ a, b, c ≤ 1000, a > b). a là lượng dữ liệu cần để xem 1 giây của video, b là lượng dữ liệu download được trong 1 giây, c là chiều dài video (giây).

Output
Số nguyên giây ít nhất mà Linh cần đợi trước khi xem phim ko bị giật.:)))

Resource limits
Execution time: 12 seconds

Memory: 256.00 MB

Lời giải

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import sys
import math
input_str = ""

for line in sys.stdin:
a = int(line.split()[0])
b = int(line.split()[1])
c = int(line.split()[2])

total = a * c
data_in_runtime = b * c

data_needed = total - data_in_runtime
time_need = math.ceil (data_needed / b)

print(time_need)

Code Viblo The Valentine Number

Link

Đề bài

Lời giải

1
2
3
4
5
6
7
8
9
10
11
12
13
import sys

before_str = ""
for line in sys.stdin:
line += "1"
for s in line:
if s == '1':
if before_str != '' and before_str != '1' and before_str != '14' and before_str != '144':
print('NO')
exit()
before_str = ""
before_str += s
print('YES')

Code Viblo Huy Chat Pro

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import sys

count = 0
number_of_people = 0

for line in sys.stdin:
if line[0] == '+':
number_of_people += 1
elif line[0] == '-':
number_of_people -=1
else:
# print(line.split(':')[1])
# print(len(line.split(':')[1]))
# print(number_of_people)
index_colon = line.find(':')
line = line[index_colon:]
s = line.rstrip().lstrip()
if s != ':':
count += (len(s)) * number_of_people

print(count)