蓝桥杯模拟-十一届省赛第二场

发布于 2021-03-18  56 次阅读


试题A:门牌制作
ans = 0
for i in range(1,2021):
    ans += str(i).count("2")
print(ans)
试题B:寻找2020

# 比较乱,有时间再优化
import re
def num(s):
    count =0
    for i in range(300):
        p=re.findall('2020',s[i])
        count+=(len(p))
    return count
def num2(s):
    count =0
    for i in range(len(s)):
        p=re.findall('2020',s[i])
        count+=(len(p))
    return count
with open("2020.txt","r") as f:
    # 横行
    t = f.readlines()
    s=[]
    for line in t:
        line = line.strip('\n')
        s.append(line)
    count=0
    count+= num(s)
    
    # 竖列
    s1=[]
    for i in range(300):
        t=[]
        for j in range(300):
            t.append(s[j][i])
        s1.append(''.join(t))
    #print(s1)
    count+= num(s1)
    # 左上->右下
    s2=[]
    for i in range(300):
        i_term=i
        t=[]
        for j in range(300):
            t.append(s[i_term][j])
            i_term+=1
            if(i_term>299):
                break
        s2.append(''.join(t))
    #print(s2)
    for i in range(1,300):
        i_term=i
        t=[]
        for j in range(0,300):
            t.append(s[j][i_term])
            i_term+=1
            if(i_term>299):
                break
        s2.append(''.join(t))
    #print(s2)
    count+=(num2(s2))
    print(count)
试题C:跑步锻炼
month=[0,31,28,31,30,31,30,31,31,30,31,30,31]
year=2000
m=1
day=1
week=5
num=0
while(year!=2020 or m!=10 or day!=2):
    if(year%400==0 or (year%4==0 and year%100!=0)):
        month[2]=29
    else:
        month[2]=28
    if(day>month[m]):
        m+=1
        day=1
        if(m>12):
            year+=1
            m=1
    week=(week+1)%7
    if(week==1 or day==1):
        num+=1
    day+=1
    num+=1
print(num)
# 调库
import datetime
begin=datetime.datetime(2000,1,1)
end=datetime.datetime(2020,10,1)
day1=datetime.timedelta(days=1)
count=0
while(begin<=end):
    if(begin.day==1 or begin.weekday()==0):
        count+=2
    else:
        count+=1
    begin+=day1
print(count)
试题D:蛇型填数
number=1
k=0
def shexing(a,n,m,k,number):
    for i in range(k,m-k):
        a[k][i]=number
        number+=1
    if(number>n*m):
        return 0

    for i in range(k+1,n-k):
        a[i][m-k-1]=number
        number+=1

    for i in range(m-k-2,k-1,-1):
        a[n-k-1][i]=number
        number+=1


    for i in range(n-k-2,k,-1):
        a[i][k]=number
        number+=1

    shexing(a,n,m,k+1,number)
n,m=map(int,input().split(' '))
a=[]
for i in range(n):
    a.append([])
    for j in range(m):
        a[i].append(0)
shexing(a,n,m,0,1)
for i in range(n):
    print(a[i])
试题E:排序

不会。

st1='jonmlkihgfedcba'
lst=list(st1)
num=0
for i in range(len(lst)):
    for j in range(0,len(lst)-1):
        if(ord(lst[j]) > ord(lst[j+1])):
            lst[j],lst[j+1]=lst[j+1],lst[j]
            num+=1
print(lst)
print(num)
试题F:成绩统计
问题描述

小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。

如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。

请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整数。

输入格式

输入的第一行包含一个整数 n,表示考试人数。

接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。

输出格式

输出两行,每行一个百分数,分别表示及格率和优秀率。百分号前的部分四舍五入保留整数。

样例输入
7
80
92
56
74
88
100
0
样例输出
71%
43%
评测用例规模与约定

对于 50% 的评测用例,1≤n≤100。

对于所有评测用例,1≤n≤10000。

n=int(input())
youxiu=0
jige=0
for i in range(n):
    score=int(input())
    if(score>=60):
        jige+=1
    if(score>=85):
        youxiu+=1
jige=int(jige/n*100+0.5)
youxiu=int(youxiu/n*100+0.5)
print(jige,"%\n",youxiu,"%",sep='')
成绩G:单词分析
问题描述

小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。

现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这个字母出现的次数。

输入格式

输入一行包含一个单词,单词只由小写英文字母组成。

输出格式

输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪个。如果有多个字母出现的次数相等,输出字典序最小的那个。

第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。

样例输入
lanqiao
样例输出
a
2
样例输入
longlonglongistoolong
样例输出
o
6
评测用例规模与约定

对于所有的评测用例,输入的单词长度不超过 1000。

word=list(input())
t=-10
letter=""
for i in word:
    p=word.count(i)
    if(p>t):
        t=p
        letter=i
    elif(p==t):
        if(i<letter):
            letter=i
print(letter,t,sep="\n")
试题H:数字三角形
问题描述
p1.png

上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。

路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右边的那个数。此外,向左下走的次数与向右下走的次数相差不能超过 1。

输入格式

输入的第一行包含一个整数N (1<N≤100),表示三角形的行数。下面的 N 行给出数字三角形。数字三角形上的数都是 0 至 100 之间的整数。

输出格式

输出一个整数,表示答案。

样例输入
5
7
3 8
8 1 0 
2 7 4 4
4 5 2 6 5
样例输出
27
# 正确50%
def solve(m,n): # 第m层 第n个数
    if(n!=0 and m!=0 and m>=n):
        return lst[m][n]+max(solve(m-1,n-1),solve(m-1,n))
    elif(m!=0 and n==0):
        return lst[m][n]+solve(m-1,n)
    elif(m==0):
        return lst[0][0]
    else:
        return -1

n=int(input())
lst=[]
for i in range(n):
    st=input()
    st=st.strip()
    lst.append(list(map(int,st.split(" "))))
if(n%2==0): #所有后续都从最中间数值开始
    n+=1
    lst.append([0 for i in range(n)])
x=n-1
y=n//2+1-1
print(solve(x,y))
试题I:平面切分
问题描述

平面上有 N 条直线,其中第 i 条直线是 y=Ai⋅x+Bi。

请计算这些直线将平面分成了几个部分。

输入格式

第一行包含一个整数 N。

以下N行,每行包含两个整数 Ai,Bi。

输出格式

一个整数代表答案。

样例输入
3
1 1
2 2
3 3
样例输出
6
评测用例规模与约定

对于 50 的评测用例,1≤N≤4, −10≤Ai,Bi≤10。

对于所有评测用例,1≤N≤1000, −100000≤Ai,Bi≤100000。

# 正确20%
import sys
n=int(input())
lst=[]
for i in range(n):
    lst.append(list(map(int,input().split(" "))))
if(n==1):
    print(2)
    sys.exit()

point=set()
lst2=[]
for i in lst:
    for j in lst2:
        if(i[0]==j[0] and i[1]==j[1]):
            continue
        else:
            x=(j[1]-i[1])/(i[0]-j[0])
            y=(j[1]*i[0]-i[1]*j[0])/(j[0]-i[0])
            point.add((x,y))
    lst2.append(i)
print(len(point)+n+1)
试题J:装饰珠
问题描述

在怪物猎人这一款游戏中,玩家可以通过给装备镶嵌不同的装饰珠来获取相应的技能,以提升自己的战斗能力。

已知猎人身上一共有 6 件装备,每件装备可能有若干个装饰孔,每个装饰孔有各自的等级,可以镶嵌一颗小于等于自身等级的装饰珠(也可以选择不镶嵌)。

装饰珠有 M 种,编号 1 至 M,分别对应 M 种技能,第 i 种装饰珠的等级为 Li,只能镶嵌在等级大于等于 Li 的装饰孔中。

对第 i 种技能来说,当装备相应技能的装饰珠数量达到 Ki 个时,会产生 Wi(Ki) 的价值。镶嵌同类技能的数量越多,产生的价值越大,即 Wi(Ki−1)<Wi(Ki)。但每个技能都有上限 Pi(1≤Pi≤7),当装备的珠子数量超过 Pi 时,只会产生 Wi(Pi) 的价值。

对于给定的装备和装饰珠数据,求解如何镶嵌装饰珠,使得 6 件装备能得到的总价值达到最大。

输入格式

输入的第 1 至 6 行,包含 6 件装备的描述。其中第 i 的第一个整数 Ni 表示第 i 件装备的装饰孔数量。后面紧接着 Ni 个整数,分别表示该装备上每个装饰孔的等级 L(1≤L≤4)。

第 7 行包含一个正整数 M,表示装饰珠(技能)种类数量。

第 8 至 M+7 行,每行描述一种装饰珠(技能)的情况。每行的前两个整数 Lj(1≤Lj≤4) 和 Pj(1≤Pj≤7) 分别表示第 j 种装饰珠的等级和上限。接下来 Pj 个整数,其中第 k 个数表示装备该中装饰珠数量为 k 时的价值 Wj(k)。

输出格式

输出一行包含一个整数,表示能够得到的最大价值。

样例输入
1 1
2 1 2
1 1
2 2 2
1 1
1 3
3
1 5 1 2 3 5 8
2 4 2 4 8 15
3 2 5 10
样例输出
20
样例说明

按照如下方式镶嵌珠子得到最大价值 20,括号内表示镶嵌的装饰珠的种类编号:

1: (1)
2: (1) (2)
3: (1)
4: (2) (2)
5: (1)
6: (2)

4 颗技能 1 装饰珠,4 颗技能 2 装饰珠 W1(4)+W2(4)=5+15=20。

评测用例规模与约定

对于 30 的评测用例,1≤Ni≤10, 1≤M≤20, 1≤Wj(k)≤500;

对于所有评测用例,1≤Ni≤50, 1≤M≤10000, 1≤Wj(k)≤10000。

如堕五里雾中
最后更新于 2022-03-28