牛客網校招全國統一模擬筆試2020年2月場運維方向編程題解

1. 添加字符

題目描述:

牛牛手裏有一個字符串A,羊羊的手裏有一個字符串B,B的長度大於等於A,所以牛牛想把A串變得和B串一樣長,這樣羊羊就願意和牛牛一起玩了。
而且A的長度增加到和B串一樣長的時候,對應的每一位相等的越多,羊羊就越喜歡。比如"abc"和"abd"對應相等的位數爲2,爲前兩位。
牛牛可以在A的開頭或者結尾添加任意字符,使得長度和B一樣。現在問牛牛對A串添加完字符之後,不相等的位數最少有多少位?

輸入:
abe
cabc
輸出:
1
str1 = input()
str2 = input()
len_str1 = len(str1)
len_str2 = len(str2)
ans = len_str1

if len_str1 < len_str2:
    i = 0
    while i+len_str1 <= len_str2:
        cnt = 0
        for j in range(len_str1):
            if str1[j] != str2[i+j]:
                cnt +=1
        if cnt < ans:
            ans = cnt
        i += 1
else:
    cnt = 0
    for j in range(len_str1):
        if str1[j] != str2[j]:
            cnt += 1
    if cnt < ans:
        ans = cnt
print(ans)

2. 排序子序列

牛牛定義排序子序列爲一個數組中一段連續的子序列,並且這段子序列是非遞增或者非遞減排序的。

牛牛有一個長度爲n的整數數組A,他現在有一個任務是把數組A分爲若干段排序子序列

牛牛想知道他最少可以把這個數組分爲幾段排序子序列

如樣例所示:

牛牛可以把數組A劃分爲[1,2,3]和[2,2,1]兩個排序子序列,至少需要劃分爲2個排序子序列,所以輸出2

在這裏插入圖片描述

示例1:
輸入
6
1 2 3 2 2 1
輸出
2
n = input()
a = list(map(int, input().split()))

if n == 1 or n == 2:
    print(1)

ans = 1
flag = 0  # 1增 0平 -1減
for i in range(1, len(a)):

    if flag == 0:
        if a[i - 1] < a[i]:
            flag = 1
        elif a[i - 1] > a[i]:
            flag = -1
    elif (flag < 0) == (a[i] > a[i - 1]): 

        ans += 1
        flag = 0

print(ans)

組隊競賽

牛牛舉辦了一次編程比賽,參加比賽的有3*n個選手,每個選手都有一個水平值a_i.現在要將這些選手進行組隊,一共組成n個隊伍,即每個隊伍3人.牛牛發現隊伍的水平值等於該隊伍隊員中第二高水平值。

例如:

一個隊伍三個隊員的水平值分別是3,3,3.那麼隊伍的水平值是3
一個隊伍三個隊員的水平值分別是3,2,3.那麼隊伍的水平值是3
一個隊伍三個隊員的水平值分別是1,5,2.那麼隊伍的水平值是2
爲了讓比賽更有看點,牛牛想安排隊伍使所有隊伍的水平值總和最大。

如樣例所示:

如果牛牛把6個隊員劃分到兩個隊伍
如果方案爲:
team1:{1,2,5}, team2:{5,5,8}, 這時候水平值總和爲7.
而如果方案爲:
team1:{2,5,8}, team2:{1,5,5}, 這時候水平值總和爲10.
沒有比總和爲10更大的方案,所以輸出10.
輸入描述:
輸出描述:
示例1:

輸入的第一行爲一個正整數n(1 ≤ n ≤ 10^5)
第二行包括3*n個整數a_i(1 ≤ a_i ≤ 10^9),表示每個參賽選手的水平值.
輸出一個整數表示所有隊伍的水平值總和最大值.
輸入:
2
5 2 8 5 1 5
輸出:
10
n = int(input())
list1 = list(map(int, input().split()))
list1 = sorted(list1, reverse=True)
ans = 0
for i in range(n):
    ans += int(list1[2*i+1])
print(ans)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章