【2020ブルーブリッジカップ】Python組真題解析-第11回ブルーブリッジカップ


      &     : 2  
    :[email protected]
         &     ,    
    :https://download.csdn.net/download/xia_yanbing/16742326

備考:現在、ブルーブリッジカップPythonエディタはIDLEです.使い方を知りたいなら、この記事を参考にしてください.https://blog.csdn.net/xia_yanbing/article/details/114641646
目次
  • A-表札制作.py
  • 参考答案:624
  • B-2020を探す.py
  • 参考答案:16520
  • C-ランニングトレーニング.py
  • 参考答案:8879
  • D-蛇形充填数.py
  • 参考答案:761
  • E-ソート.py
  • 参考答案:jonmlkihgfedcba
  • F-成績統計.py

  • G-単語分析.py

  • H-デジタル三角形.py

  • I-平面分割.py

  • J-デコレーションビーズ.py


  • A-表札制作py
    タイトルアドレス:https://www.lanqiao.cn/problems/592/learning/
    参考答案:624
    # https://www.lanqiao.cn/problems/592/learning/
    #     :624
    
    
    total = 0
    for i in range(1,2021):
        total += (str(i).count("2"))
    
    print(total)
    
    # 624
    

    B-2020を探す.py
    テーマアドレス:オンライン練習問題アドレスなし
    参考答案:16520
    #         
    #     :16520
    
    def search_row(l):
        res = 0
        m = len(l[0])
        n = len(l)
        for i in range(n):
            for j in range(m-3):
                if l[i][j] == "2" and l[i][j+1] == "0" \
                   and l[i][j+2] == "2" and l[i][j+3] == "0":
                    res += 1
        return res
    
    
    def search_xie(l):
        res = 0
        m = len(l[0])
        n = len(l)
        for i in range(n-3):
            for j in range(m-3):
                if l[i][j] == "2" and l[i+1][j+1] == "0" \
                   and l[i+2][j+2] == "2" and l[i+3][j+3] == "0":
                    res += 1
        return res
    
    
    def search_col(l):
        res = 0
        m = len(l[0])
        n = len(l)
        for j in range(m):
            for i in range(n-3):
                if l[i][j] == "2" and l[i+1][j] == "0" \
                   and l[i+2][j] == "2" and l[i+3][j] == "0":
                    res += 1    
        return res
    
    
    
    with open("2020.txt",'r') as fp:
        lines = fp.readlines()
        i = 0
        for line in lines:
            lines[i] = line.strip('
    '
    ) i+=1 # 16520 print(search_row(lines)+search_xie(lines)+search_col(lines))

    C-ランニングトレーニングpy
    タイトルアドレス:https://www.lanqiao.cn/problems/597/learning/
    参考答案:8879
    # https://www.lanqiao.cn/problems/597/learning/
    #     :8879
    
    flag = 6
    
    def nextDay(date):
        '''
        date:    yyyy-mm-dd
        return next_date,is_monday,is_month_begin
              
        '''
        date = list(map(int,date.split("-")))
        y,m,d = date
    
        d+=1
    
        if m == 12 and d == 32:
            y += 1
            m = 1
            d = 1
        elif m == 2:
            if is_leap_year(y):
                if d == 30:
                    m = 3
                    d = 1
            else:
                if d == 29:
                    m = 3
                    d = 1
        elif is_big_month(m):
            if d == 32:
                m += 1
                d = 1
        elif not is_big_month(m):
            if d == 31:
                m += 1
                d = 1
    
        global flag
        add_week()
        
        is_month_begin = True if d == 1 else False
        is_monday = True if flag == 1 else False
    
        new_date = "%d-%02d-%02d" % (y,m,d)
        return new_date,is_monday,is_month_begin
                
        
    
    def is_leap_year(year):
        if year % 4 == 0 and year % 100 != 0:
            return True
        elif year % 400 == 0:
            return True
        return False
    
    def is_big_month(month):
        if month in [1,3,5,7,8,10,12]:
            return True
        else:
            return False
    
    def add_week():
        global flag
        flag = (flag + 1) % 8 if (flag + 1) % 8 else 1
    
    
    def main():
        start_time = "2000-01-01"
        # end_time = "2000-01-10"
        end_time = "2020-10-01"
        total = 2
        while start_time != end_time:
            start_time,is_monday,is_month_begin = nextDay(start_time)
            if is_monday or is_month_begin:
                total += 2
            else:
                total += 1
            print(start_time,is_monday,is_month_begin,total)
        print(total)
        # ans = 
        
    main()
    

    D-蛇形充填数py
    タイトルアドレス:https://www.lanqiao.cn/problems/594/learning/
    参考答案:761
    # https://www.lanqiao.cn/problems/594/learning/
    #     :761
    
    def print_out(lst):
        #      
        for line in lst:
            for x in line:
                print("%04d" % x,end=" ")
            # print(" ".join(map(str, i)))
            print()
    
    
    lst = [i for i in range(1000)]
    
    num = 1
    
    res = [[0 for i in range(101)] for i in range(101)]
    
    i, j = 0, 0
    
    # 
    res[0][0] = num
    while i != 100 and j != 100:
        num += 1
        #   
        j += 1
        res[i][j] = num
        while j > 0:
            #      
            num += 1
            i += 1
            j -= 1
            res[i][j] = num
        num += 1
        #   
        i += 1
        res[i][j] = num
        while i > 0:
            #      
            num += 1
            i -= 1
            j += 1
            res[i][j] = num
    
    #      
    with open ('./out.txt','w+') as fp:
        for line in res:
            for x in line:
                fp.write("%04d " % x)
            fp.write("
    "
    )```

    E-ソートpy
    タイトルアドレス:https://www.lanqiao.cn/problems/598/learning/
    参考答案:jonmlkihgfedcba
    # https://www.lanqiao.cn/problems/598/learning/
    #     :jonmlkihgfedcba
    
    import random
    
    count = 0
    
    # def bubble_sort(lst):
    #     n = len(lst)
    #     for i in range(n-1):
    #         # is_ordered = True
    #         j = 0
    #         while j < n-i-1:
    #             if lst[j] > lst[j+1]:
    #                 #   
    #                 lst[j], lst[j+1] = lst[j+1], lst[j]
    #                 global count
    #                 count += 1
    #                 # is_ordered = False
    #             j += 1
    
    def bubble_sort(lst):
        n = len(lst)
        for i in range(n-1):
            is_ordered = True
            j = 0
            while j < n-i-1:
                if lst[j] > lst[j+1]:
                    #   
                    lst[j], lst[j+1] = lst[j+1], lst[j]
                    global count
                    count += 1
                    is_ordered = False
                j += 1
            if is_ordered:
                #     
                break
                
    
    # string =[chr(i) for i in range(ord('a'),ord('p'))]
    
    # data = ['o', 'n', 'm', 'l', 'k', 'j',
    #         'i', 'h', 'g', 'f', 'e', 'd', 'c', 'b', 'a']
    
    # 1.    2.     
    
    data = ['j', 'o', 'n', 'm', 'l', 'k',
            'i', 'h', 'g', 'f', 'e', 'd', 'c', 'b', 'a']
    
    # data = string[::-1]
    
    print(data)
    bubble_sort(data)
    print(data)
    print(count)
    

    F-成績統計py
    タイトルアドレス:https://www.lanqiao.cn/problems/502/learning
    # https://www.lanqiao.cn/problems/502/learning
    
    from decimal import *
    
    n = int(input())
    
    socres = [int(input()) for i in range(n)]
    
    youxiu = 0
    jige = 0
    
    for i in socres:
        if i >= 85:
            youxiu += 1
        if i >= 60:
            jige += 1
    
    #    
    percent1 = int(round(float(Decimal(jige) / Decimal(n)) * 100, 0))
    percent2 = int(round(float(Decimal(youxiu) / Decimal(n)) * 100, 0))
    
    print("%d%%" % percent1)
    print("%d%%" % percent2)
    

    G-単語分析py
    タイトルアドレス:https://www.lanqiao.cn/problems/504/learning
    # https://www.lanqiao.cn/problems/504/learning
    
    #   26        
    charLst = [0] * 26
    
    string = input()
    
    for char in string:
        charLst[ord(char)-97] += 1
    
    max_value = max(charLst)
    res_index = charLst.index(max_value)
    res_chr = chr(res_index + 97)
    
    print(res_chr)
    print(max_value)
    

    H-デジタル三角形py
    タイトルアドレス:https://www.lanqiao.cn/problems/505/learning/
    # https://www.lanqiao.cn/problems/505/learning/
    
    #     https://www.jianshu.com/p/c20b6b9a178a (C++)
    
    
    if __name__ == '__main__':
        # MAX = 105
        n = int(input())
        MAX = n+2
        nums = [[0 for i in range(1, MAX)] for i in range(1, MAX)]
        dp = [[0 for i in range(1, MAX)] for i in range(1, MAX)]
    
        #       
        for i in range(1, n+1):
            line = map(int, input().split(" "))
            for j, e in enumerate(line):
                nums[i][j+1] = e
    
        # print(nums)
    
        #        
        if n % 2 == 0:
            dp[n][n//2] = nums[n][n//2]
            dp[n][n//2 + 1] = nums[n][n//2 + 1]
        else:
            dp[n][n//2 + 1] = nums[n][n//2 + 1]
    
        #         
        for i in range(n-1, 0, -1):
            for j in range(1, i+1):
                #              0
                if dp[i+1][j] != 0 or dp[i+1][j+1] != 0:
                    dp[i][j] = nums[i][j] + max(dp[i+1][j], dp[i+1][j+1])
    
        print(dp[1][1])
    

    I-平面分割py
    タイトルアドレス:https://www.lanqiao.cn/problems/503/learning/
    # https://www.lanqiao.cn/problems/503/learning/
    
    #   :                :
    # 1、          。
    # 2、                   +1。
    # 3、                         +1。
    
    n = int(input())
    
    #      (      )
    set_line = set()
    #      
    set_point = set()
    
    for i in range(n):
        tmp = tuple(input().split())
        set_line.add(tmp)
        set_point.add(tmp[0])
    
    
    print(len(set_line)+len(set_point))
    
    

    J-装饰珠py
    タイトルアドレス:https://www.lanqiao.cn/problems/507/learning/
    # https://www.lanqiao.cn/problems/507/learning/
    
    import os
    import sys
    
    s = []
    r = []
    m = []
    
    for i in range(6):
        s.append(list(map(int, input().split())))
    n = int(input())
    for i in range(n):
        r.append(list(map(int, input().split())))
    for i in range(6):
        p = s[i]
        for j in range(n):
            if i == 0:
                m.append(p[1:].count(int(j+1)))
            else:
                m[j] += p[1:].count(int(j+1))
    
    '''print(m)''' ''' m[j]  6      j+1  m[j] '''
    mm = m
    '''  j    j   '''
    up = []
    down = []
    '''up            ,down            '''
    
    
    def up1(k):
        if mm[k] >= r[k][1]:
            return 0
        elif mm[k] == 0:
            return r[k][2]
        else:
            return r[k][2+mm[k]]-r[k][1+mm[k]]
    
    
    def down1(k):
        if mm[k] == 1:
            return r[k][2]
        elif mm[k] > r[k][1]:
            return 0
        else:
            return r[k][1+mm[k]]-r[k][mm[k]]
    
    
    for i in range(n):
        up.append(up1(i))
        down.append(down1(i))
    
    '''print(up,down)'''
    ''' n+1  ,  1 n      1       1     ,     1、 1,up、down  '''
    
    
    def main1(n):
        if n == 0:
            return
        while max(up[:n]) > down[n] and mm[n] > 0:
            t = up.index(max(up[:n]))
            mm[t] += 1
            up[t] = up1(t)
            mm[n] -= 1
            down[n] = down1(n)
        main1(n-1)
        return
    
    
    point = 0
    main1(n-1)
    '''   n ,       ,   1'''
    '''print(up,down)
    print(mm)'''
    for i in range(n):
        if mm[i] != 0:
            point += r[i][1+mm[i]]
    print(point)
    '''     '''