天天看點

2020牛客NOIP賽前集訓營-普及組(第四、五場)

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
           

第五場

2020牛客NOIP賽前集訓營-普及組(第四、五場)

我确實隻适合做水題。

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)
           

完結。

繼續閱讀