2.28每日一练解答

今天做了一下每日一练里的“简单题”:《小艺的英文名》

但是做了将近80分钟还是只有80%的数据过了

本人自己觉得没有什么问题,还请各位大佬能够帮忙看看是哪里出了问题

一起学习,一起进步!

k=int(input())
name=input()
#三个限制:回文,前k个字母每个至少出现一次,只有前k个字母
#先判断小艺的名字有奇数个还是偶数个字母
n=len(name)
letter='abcdefghijklmnopqrstuvwxyz'
letter=letter[0:k]
if n%2==0:#偶数情况
    #重要的问题是如何判断用掉了几种字母
    b=set()
    for i in range(0,int(n/2)):
        if name[i]!='?':
            b.add(name[i]) #巧妙利用集合的无重性,计算出用掉字母的个数
    x=0
    for i in b:
        x+=1 #x为用掉字母的个数
    for i in b:
        letter=letter.replace(i,'') #剩下的还没用的字母序列
    #再数问号的个数
    y=0
    for i in range(0,int(n/2)):
        if name[i]=='?':
            y+=1
    if y<k-x: #问号数量太少
        print('QAQ')
    if y>=k-x: #问号数量残余
        s=''
        p=y-k+x #可以用a填充的问号数(因为字典序)
        ins=0
        for i in range(0,int(n/2)):
            if name[i]!='?':
                s+='%s'%(name[i])
            elif name[i]=='?' and p>0:
                s+='a'
                p-=1
            elif name[i]=='?' and p==0:
                #填充a完毕以后开始顺次填充剩下的字母
                s+='%s'%(letter[ins])
                ins+=1
        s1=''.join(reversed(s))
        s=s+s1
        print(s)
        #偶数的情况解决了以后,奇数的情况也就明朗了
else:
    b=set()
    for i in range(0,int(n/2)+1):
        if name[i]!='?':
            b.add(name[i]) #巧妙利用集合的无重性,计算出用掉字母的个数
    x=0
    for i in b:
        x+=1 #x为用掉字母的个数
    for i in b:
        letter=letter.replace(i,'') #剩下的还没用的字母序列
    #再数问号的个数
    y=0
    for i in range(0,int(n/2)+1):
        if name[i]=='?':
            y+=1
    if y<k-x: #问号数量太少
        print('QAQ')
    if y>=k-x: #问号数量残余
        s=''
        p=y-k+x #可以用a填充的问号数(因为字典序)
        ins=0
        for i in range(0,int(n/2)+1):
            if name[i]!='?':
                s+='%s'%(name[i])
            elif name[i]=='?' and p>0:
                s+='a'
                p-=1
            elif name[i]=='?' and p==0:
                #填充a完毕以后开始顺次填充剩下的字母
                s+='%s'%(letter[ins])
                ins+=1
        s1=''.join(reversed(s))
        s2=s[0:len(s)-1] #对中间略微做一点处理
        s=s2+s1
        print(s)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
glibc 2.28是GNU C库的一个版本。GNU C库(GNU C Library)是一个开源的C库,为GNU操作系统和其他使用GNU系统的操作系统提供服务。它是一个相当庞大的项目,提供许多与系统和进程直接相关的函数和工具。 glibc 2.28是该C库的一个重要更新版本。此版本的引入了一些新的特性和改进,以提高系统的性能和稳定性。其中一些主要改进包括: 1. 支持新的硬件体系结构:更新了对最新硬件体系结构的支持,使得程序可以在更广泛的平台上运行。 2. 提高了性能和效率:通过改进内存管理和文件系统访问等方面,提高了系统的性能和效率。 3. 增加了新的功能:glibc 2.28引入了一些新的函数和工具,增强了系统的功能。例如,增加了对IPv6协议的支持,使得系统可以更好地与IPv6网络进行通信。 4. 修复了安全漏洞:在glibc 2.28中,一些已知的安全漏洞得到修复,从而提高了系统的安全性。 5. 优化了API和ABI:glibc 2.28进行了一些API和ABI的优化,使得应用程序的迁移更加简单和无缝。这意味着现有的应用程序可以在不需要太多修改的情况下在glibc 2.28上运行。 总的来说,glibc 2.28是GNU C库的一个更新版本,引入了一些新的特性和改进,提高了系统的性能和稳定性,并修复了一些安全漏洞。这使得开发人员和用户能够获得更好的体验和更高效的操作系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值