Tinkoff Challenge - Final Round (Codeforces Round #414, rated, Div. 1 + Div. 2) 【ABC】

老年人题解,语言python3

A - Bank Robbery

题意:给你ABC,以及n个数,问你在(B,C)之间的数有多少个。

题解:对于每个数判断一下就好了嘛

x,y,z = map(int,input().split())
n = int(input())
print(len(list(filter(lambda x:y<int(x) and z>int(x),input().split()))))

B. Cutting Carrot

题意:给你一个高为h,底为1的等腰三角形,你需要平行的砍n-1刀,然后使得每一块的面积都相同,问你每次砍的位置在哪儿。

题解:初中几何题,假设第i次砍的位置是x,则,那么答案就出来了嘛

n,h = map(int,input().split())
for x in range(1,n):
    print("%.10f"%(h*(x/n)**0.5),end=' ')

C. Naming Company

题意:每个人都有一个字符集,A想让最后的字符串的大小最小,B想让字符串的大小最大,都很机智,问你最后的答案是什么模样的。

题解:贪心。A,B只可能用前n/2个字符,排序之后。如果A的字符小于B的字符,那么显然都会抢占最前面的位置;否则的话,就都会抢占最后的位置,让对方尽量放在前面。

a = list(input())
b = list(input())
a.sort()
b.sort(reverse=True)
ans = list()
for i in a:
    ans.append("a") 
len1 = len(a)//2 - 1
len2 = len(a)//2 - 1
if len(a)%2:
    len1 = len1 + 1
i = 0 # first
j = 0 # end
flag = 0
ai = 0
aj = 0
bi = 0
bj = 0
while i + j < len(a):
    if i + j < len(a):
        if a[ai] < b[bi] and flag == 0:
            ans[i] = a[ai]
            i = i + 1
            ai = ai + 1
        else:
            ans[len(a)-j-1] = a[len1 - aj]
            j = j + 1
            aj = aj + 1
            flag = 1
    if i + j < len(a):
        if a[ai] < b[bi] and flag == 0:
            ans[i] = b[bi]
            i = i + 1
            bi = bi + 1
        else:
            ans[len(a)-j-1] = b[len2 - bj]
            j = j + 1
            bj = bj + 1
            flag = 1
print("".join(ans))
posted @ 2017-05-16 16:37  qscqesze  阅读(235)  评论(0编辑  收藏  举报