闲言
一会陪对象去做美甲去。
正文
今天折腾了一道题。哎呀妈呀,太久没用语法真的一点都不熟悉了
题目在这
问题描述
蓝桥杯组委会创作了一首气势磅礴的开赛主题曲,其歌词可用一个仅包含小写字母的字符串 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 名同学之后,家里蹲大学最多还能组建多少个团队参加蓝桥杯的团队赛。
输入格式
数据有多组。
第一行输入一个整数 TT(1≤T≤1051≤T≤105),表示数据的组数。
接下来的 TT 行,每行输入三个整数 NN、MM、KK(0≤N,M≤109,0≤K≤N+M0≤N,M≤109,0≤K≤N+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)