2023寒假集训-进阶训练赛(二)

问题 A: 过滤多余的空格

一个句子中也许有很多个连续空格,过滤掉多余的空格,只留下一个空格。

st=map(str,input().split())
print(" ".join(str(i) for i in st))

问题 B: 单词反转

输入一个句子(一行),将句子中的每一个单词翻转后输出。

st=map(str,input().split())
print(" ".join(i[::-1] for i in st))

问题 C: 读入未知数目的string对象

我们读入未知数目的string对象,每次输出对应的string对象编号和内容格式见样例

ass=1
while True:
    try:
        ls=map(str,input().split())
        for i in ls:
            print(ass,i)
            ass+=1
    except:
        break

问题 D: 连续出现的字符

给定一个字符串,在字符串中找到第一个连续出现至少k次的字符。

k=int(input())
s=str(input())
ls=list()
ll=list()
fl=0
for i in s:
    if i in ls:
        ll[ls.index(i)]+=1
    else:
        ls.append(i)
        ll.append(1)
    if k in ll:
        print(i)
        fl = 1
        break
if fl==0:
    print("No")

问题 F: 【蓝桥杯2022初赛】刷题统计

小明决定从下周一开始努力刷题准备蓝桥杯竞赛。
他计划周一至周五每天做 a 道题目,周六和周日每天做 b 道题目。
请你帮小明计算,按照计划他将在第几天实现做题数大于等于 n 题?

import math
a, b, n = map(int, input().split())
z=5*a+2*b
q=n//z
y =n-q*z
la = 0
if y== 0:
    print(7 *q)
else:
    for i in range(1, 8):
        if i <= 5:
            la = la + a
        else:
            la = la + b
        if la >= y:
            break
    print(7 * q + i)

问题 G: Another country

卢卡为了救他身边病危的精灵,只好去远在第二大陆的精灵之国采取宝贵的药物。他来到这个国家时被这个新国家的日期表示方式搞晕了,他不知道月份和年份哪个在前哪个在后,但他得赶快拿到药物着急的他求助于你,请你告诉他叭给定一个长度为4的字符串

如果是YYMM形式 就输出YYMM;如果是MMYY形式 就输出MMYY

如果两者都可以 就输出AMBIGUOUS;如果两者都不行 就输出NA

s=str(input())
a=s[:2]
b=s[2:]
if (int(a)>12 or int(a)==0) and (int(b)>12 or int(b)==0):
    print("NA")
elif (int(a)>12 or int(a)==0):
    print("YYMM")
elif (int(b)>12 or int(b)==0):
    print("MMYY")
else:
    print("AMBIGUOUS")

问题 J: 餐馆指南

你决定写一本介绍好餐厅的书。你想介绍的餐厅有n家 : 餐厅1,餐厅2,...餐厅n,1 <= n <= 100.餐厅i在Si市,你对每一家餐厅都有一个得分pi,1 <= pi <= 100,没有两家餐馆得分相同。

您要按以下顺序介绍餐厅:餐厅按其城市名称的字典顺序从小到大排列。如果同一个城市有多家餐厅,则按得分降序排列。按照书中介绍的顺序打印餐厅的编号。

n=int(input())
ls=list()
for i in range(n):
    a,b=map(str,input().split())
    ls.append([i+1,a,int(b)])
ls.sort(key=lambda x:(x[1],-x[2]))
for i in range(n):
    print(ls[i][0])

问题 K: 罪恶沼泽

不知道21级军训拉练时有没有体验过沼泽,至少它对于大二人来说还是很痛苦的……
沼泽长度为N米,现在所有人都站在起点(就是第0米处),每次都可以选择跨一小步(走一米),或者跨一大步(走两米)。
但是沼泽沼泽,最恶心的地方就是有些点是不能踩的,一脚下去,有来无回……
问有多少种方式能从起点到达终点(第N米处),并且中途不会踩到沼泽。
结果对109+7取模

n,m = map(int,input().split())
flags = [False]*(n+1)
for i in range(m):
    point = int(input())
    flags[point] = True
dp = [0]*(n+1)
dp[0] = 1
if flags[1]:
    dp[1] = 0
else:
    dp[1] = 1
for i in range(2,n+1):
    if not flags[i]:
        dp[i] = int((dp[i-1]+dp[i-2])%(1e9+7))
print(dp[n])

问题 L: 异或&加法

大家都知道,异或的性质就相当于不带进位的二进制加法。
那么我们再稍微拓展一下,如果加法与异或在十进制中所产生的结果相同的话,会怎样呢?
给一个二进制数n,需要你找出一对非负整数x、y,使得它们符合下面的两个性质。

  • x+y<=n
  • x+y==x⊕y

那么问题来了,对于一个给定的n,能够有多少对符合条件的(x,y)呢?
结果对109+7取模。

s = input()
mod = 1e9+7
ans = 0
cnt = 1
for i in s:
    ans = int((ans*3)%mod)
    if i == '1':
        ans = int((ans + cnt) % mod)
        cnt = int((cnt*2)%mod)
 
print(int((ans+cnt)%mod))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值