Powered by:AB_IN 局外人
第四场
A 时间
模拟即可。
P y t h o n 3 Python3 Python3
a,b=map(int , input().split(":"))
b += 30
if b >= 60:
a += 1
b -= 60
a = (a + 3) % 24
if a < 10:
a1 = "0" + str(a)
else:
a1 = str(a)
if b < 10:
b1 = "0" + str(b)
else:
b1 = str(b)
print(a1+":"+b1)
C
+
+
C++
C++
记一下
%
02
d
\%02d
%02d,默认情况下,数据数据宽度不够2位是用空格填补的,但是因为2d前面有0,表示,数据宽度不足时用0填补。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a, b;
scanf("%d:%d", &a, &b);
b += 30;
if(b >= 60){
a += 1;
b -= 60;
}
a = (a + 3) % 24;
printf("%02d:%02d\n", a, b);
return 0;
}
B 石子
抱着混分的心态写的代码,但经过几次模拟之后发现, A l i c e Alice Alice是很难获胜的,因为至少取一个,还得是偶数。集中情况试了试,发现只有当石子是一堆,且石子数量为偶数的时候, A l i c e Alice Alice为必胜。
while True:
try:
n = int(input())
lst = list(map(int , input().split()))
if n == 1:
if lst[0]&1:
print("NO")
else:
print("YES")
elif lst.count(1) == n:
print("NO")
else:
print("NO")
except:
break
第五场
我确实只适合做水题。
A T1 购物
列出公式即可,既除了赠送的,其他都是要用 x x x买的。所以算一下赠送的,就是 n / / ( k + 1 ) n // (k + 1) n//(k+1),即参与这个买 k k k赠一活动的次数。
for _ in range(int(input())):
n,k,x = map(int , input().split())
print( (n - n // (k + 1)) * x)
B T2 交换
两种情况取最大值
- 第一种就是原字符串中 1 1 1的最长的长度,用 p y py py的 s p l i t split split分开即可。
- 第二种就是要用题目中的条件,把一段前面的 [ 1 , x ] [1,x] [1,x]接到最后,即让 1 1 1与 n n n接上。所以,如果通过这个条件想要创造出一个更长的 1 1 1串,那么就得 1 1 1和 n n n两个地方都得为 1 1 1,再利用刚才 s p l i t ( " 0 " ) split("0") split("0")分出来的段,取第一段和最后一段的长度加和即可。
s = input()
lst = s.split("0")
ans = len (max( lst , key = lambda x : len(x)) )
if s[0]=='0' or s[-1]=='0' or len(lst) == 1:
print(ans)
else:
print( max( len(lst[0]) + len(lst[-1]) , ans ))
C T3 最少移动
随机选两个相邻的数,一个加1,一个减1,最后要所有数都一样,那么就都是平均数。所以一开始想判断是否每个数都能变成相同。如果可以,就从尾到头遍历,和平均值比较,大了就减,然后前一个加。
for _ in range(int(input())):
n = int(input())
lst = list(map(int , input().split()))
if sum(lst) % len(lst) != 0 :
print(-1)
else:
ans=0
ave = sum(lst) // len(lst)
for i in range(n-1 , -1 , -1):
if lst[i] != ave:
ans += abs (lst[i] - ave)
if lst[i] > ave:
lst[i-1] += abs (lst[i] - ave)
else:
lst[i-1] -= abs (lst[i] - ave)
print(ans)
完结。