yanchang
yanchang
发布于 2025-04-04 / 18 阅读
0
0

蓝桥杯准备第二天

闲言

一会陪对象去做美甲去。

正文

今天折腾了一道题。哎呀妈呀,太久没用语法真的一点都不熟悉了

题目在这

问题描述

蓝桥杯组委会创作了一首气势磅礴的开赛主题曲,其歌词可用一个仅包含小写字母的字符串 SS 表示。SS 中的每个字符对应一个音高,音高由字母表顺序决定:a=1,b=2,...,z=26a=1,b=2,...,z=26。字母越靠后,音高越高。

为了增强歌曲感染力,组委会希望从中选取一段子串作为副歌。该子串需满足以下条件:

  • 所有字母都必须唯一。

此外,若副歌包含“lanqiobe”的前缀(例如“l”、“la”、“lan”等),则可额外获得创作灵感加成:

  • “l”: 10 分

  • “la”: 20 分

  • “lan”: 30 分

  • “lanq”: 40 分

  • “lanqi”: 50 分

  • “lanqio”: 60 分

  • “lanqiob”: 70 分

  • “lanqiobe”: 80 分

注意:创作灵感加成只能加一次,且只加最高的那个分数。例如,如果副歌是“la”,只会加 20 分,而不会再加上 10 分。

副歌的感染力 = 所有字母对应的音高之和 + 最高的创作灵感加成。

现在,请你找出最佳副歌子串。若有多个满足条件的子串,则输出字典序最小的一个。

输入格式

第一行包含一个正整数 NN ( 1≤N≤2×1051≤N≤2×105 ),表示字符串 SS 的长度。

第二行包含一个仅由小写字母所组成的字符串 SS,长度为 NN

输出格式

输出一个字符串,表示最佳副歌子串。如果有多个满足条件的子串,则输出字典序最小的那个。

样例输入

8
lbcaccla

样例输出

cla

实际代码

然后下面是我的代码

def findMaxStr():
    N=int(input())
    DataStr=input()
    if(N==0):
      print("")
      return
    dirTag={}
    sums=0
    maxsums=0
    nowadd=0
    keyTag=-1
    maxl=0
    maxr=0
    addstr="lanqiobeA"
    left=0;right=0;
    while(right<N):
        sums+=(ord(DataStr[right])-ord('a')+1)
        if(DataStr[right] in dirTag):            
            ml=dirTag[DataStr[right]]
            dirTag[DataStr[right]]=right
            while(left<=ml):
                sums-=(ord(DataStr[left])-ord('a')+1)
                if(DataStr[left]=='l'):
                    sums-=nowadd
                    nowadd=0
                    keyTag=-1
                left+=1
            pass
        else:
            dirTag[DataStr[right]]=right
            pass
        if(DataStr[right]=='l'):
            keyTag=0
            pass
        if(keyTag>=0):
            if(addstr[keyTag]==DataStr[right]):
                nowadd+=10
                sums+=10
                keyTag+=1
            else:
                keyTag=-1
        if(sums>maxsums):
            maxsums=sums
            maxl=left
            maxr=right
        elif(sums==maxsums):
            if(DataStr[maxl:maxr+1]>DataStr[left:right+1]):
                maxl=left
                maxr=right
        right+=1
    print(DataStr[maxl:maxr+1])
    pass
findMaxStr()

测试代码

def findMaxStr():
    N=int(input())
    DataStr=input()
    dirTag={}
    sums=0
    maxsums=0
    nowadd=0
    keyTag=-1
    maxl=0
    maxr=0
    addstr="lanqiobeA"
    left=0;right=0;
    while(right<N):
        sums+=(ord(DataStr[right])-ord('a')+1)
        if(DataStr[right] in dirTag):            
            ml=dirTag[DataStr[right]]
            dirTag[DataStr[right]]=right
            while(left<=ml):
                sums-=(ord(DataStr[left])-ord('a')+1)
                if(DataStr[left]=='l'):
                    sums-=nowadd
                    nowadd=0
                    keyTag=-1
                left+=1
            pass
        else:
            dirTag[DataStr[right]]=right
            pass
        if(DataStr[right]=='l'):
            keyTag=0
            pass
        if(keyTag>=0):
            if(addstr[keyTag]==DataStr[right]):
                nowadd+=10
                sums+=10
                keyTag+=1
            else:
                keyTag=-1
        print(f"当前为:{DataStr[left:right+1]}\n 价值为{sums}")
        if(sums>maxsums):
            maxsums=sums
            maxl=left
            maxr=right
        elif(sums==maxsums):
            if(DataStr[maxl:maxr+1]>DataStr[left:right+1]):
                maxl=left
                maxr=right
        right+=1
    print(DataStr[maxl:maxr+1])
    print(maxsums)
    pass
findMaxStr()

通过100%

正文

求阶乘然后对某个数取余,总之不要傻傻的直接干

ans=1
n=int(input())
while n>1:
  ans*=n
  ans%=1000000007
  n-=1
print(ans)

正文

问题描述

一年一度的蓝桥杯大赛又要开始了!

今年,组委会突发奇想,搞了个“男女搭配,干活不累”的团队赛(新模式),每个参赛团队必须由两名男生和一名女生组成。

小蓝就读的家里蹲大学也是蓝桥杯的参赛院校之一。听说要举办团队赛后,他摩拳擦掌,准备大展身手。

只是,家里蹲大学的领导却突然宣布,为了鼓励学生全面发展,要从包括小蓝在内的 NN 名男生和 MM 名女生中,选出 KK 名优秀学生,送去参加一个重要的,em……全国青少年挖掘机技能特训冬令营。这个集训的时间正好和蓝桥杯冲突,这意味着被选中的同学将无法参加蓝桥杯比赛。

这突如其来的消息,让小蓝和同学们有点措手不及。现在,大家都想知道,在送走了 KK 名同学之后,家里蹲大学最多还能组建多少个团队参加蓝桥杯的团队赛。

输入格式

数据有多组。

第一行输入一个整数 TT1≤T≤1051≤T≤105),表示数据的组数。

接下来的 TT 行,每行输入三个整数 NNMMKK0≤N,M≤109,0≤K≤N+M0≤N,M≤109,0≤KN+M),分别表示男生人数、女生人数和需要派去参加特训的学生人数。

输出格式

对于每组数据,输出一个整数,表示最多可以组建的团队数量。

样例输入

2
2 1 0
7 3 3

样例输出

1
2
num=int(input())
ak=[]
for i in range(num):
    M,N,K=map(int,input().split())
    if(M%2==1):
        M=M-1
        K-=1
    if(M>2*N):
        m=M-N*2
        K-=m
        M=M-N*2
    elif(2*N>M):
        re=N-M//2
        N-=re
        K-=re
    if(K<=0):
        ak.append(N)
        continue
    n=K%3
    K=(K-n)//3
    N=N-K
    if(n!=0):
        N-=1
    if(N<0):
        ak.append(0)
    else:
        ak.append(N)
for i in ak:
    print(i)


评论