个人技术分享

今日复习内容:做一下昨天的算法赛题目,试试基础怎样

小白挑战赛一共6题,我只会5题,而且这5题是全对的,比起上次的两题,已经有进步了。

第一题:六一献礼

题目描述:

六月的阳光热情似火,孩子们的笑声洋溢着快乐。六一儿童节,是属于每一位孩子的节日。

快乐成长,梦想启航。正是无数孩子的天真无邪,才有了我们五彩斑斓的世界。

现在,未来庆祝这个属于孩子们的节日,蓝桥云课特别准备了一份礼物,希望能够带给每一位孩子,参赛者惊喜和欢乐。

请你输出61,领取这份礼物!

输入格式:

本题为填空题,无需输入即可作答。

输出格式:

输出一个数字或字符串,领取礼物。

参考答案:

print("61")

 第二题:六一晚餐

题目描述:

随着六一儿童节的临近,蓝桥学院的校长决定组织所有班级的学生外出共享一顿丰盛的晚餐以庆祝这一特殊的日子。餐厅已经准备好了n张餐桌,每个班级将占用一张餐桌。为了让大家坐得舒适,他们需要为每张桌子添加x把椅子。

为了让餐厅的分为更加和谐美好,校长提出了以下两个要求。

1.每张桌子的所有椅子都必须是同一种颜色

2.每种颜色的椅子都至少要用到一张桌子上

现在,请你帮助校长判断能否在满足上述条件的基础上安排椅子。

输入格式:

第一行包含一个 整数T(1 <= T <= 10^2),表示数据组数。

对于每组数据:

第一行包括三个整数n,m,x(1 <= n,m,x <= 10^3),分别表示餐桌的数量,椅子颜色的数量和每张桌子需要的椅子数量。

第二行包含m个整数a1,a2,...am(1 <= ai <= 10^3),表示每种颜色的椅子数量。

输出格式:

对于每组数据,如何能够满足校长的要求,就输出Yes,否则输出No。

参考答案:

t = int(input())
for _ in range(t):
  n,m,x = map(int,input().split())
  a = list(map(int,input().split()))
  a.sort()
  if a[0] < x:
    print("No")
    continue
  else:
    if n < m:
      print("No")
    else:
      ans = 0
      for i in range(m):
        ans += a[i] // x
      if ans >= n:
        print("Yes")
      else:
        print("No")

 第三题:字符串连接计数

问题描述:

给定N个字符串S1,S2,...SN,请计算任选其中两个不同的字符串Si,Sj,并按照SiSj的顺序连接所形成的字符串T共有多少种不同的结果。

输入格式:

输入包括多行,第一行为一个整数N(2 <= N <= 100),表示字符串的数量;

接下来的N行,每行为一个字符串Si(1 <= |Si| <= 100),由英文小写字母组成。

输出格式:

输出一个整数,表示不同结果的数量。

参考答案:

from itertools import permutations
n = int(input())
a = []
for i in range(n):
  a.append(input())
b = set()
for k in permutations(a,2):
  b.add("".join(k))
print(len(b))



 第四题:字符串加法

问题描述:

字符串王国也是存在加减乘除计算法则的,只不过与我们熟悉的法则有所不同。以加法为例,两个数字13和14,按照正常的加法运算法则结果是27,但是按照字符串王国的加法运算法则结果是1314,即直接把两个字符串进行拼接。

现在,给定两个数字A和B,请你按照字符串王国的加法运算法则来计算A + B的值。

请注意答案可能很大,你需要将答案对10^9 + 7取模后再输出。

输入格式:

第一行输入一个数字A(1 <= A <= 10^100000)

第二行输入一个数字B(1 <= B <= 10^100000)

保证A和B都是合法数字。

输出格式:

输出一个整数表示答案。

参考答案:

a = int(input())
b = int(input())
s = str(a) + str(b)
mod = 1000000000 + 7
print(int(s) % mod)

 第五题:体育课

问题描述:

蓝桥学院共有N名同学,他们正在体育老师的带领下,玩丢手绢的游戏。具体的说,N名同学会围成一个圈,体育老师会给其中一些同学拿上手绢,然后每一秒可以选择一位带手绢的同学进行以下操作:

将手绢传递给其右手边(顺时针)第一位未拿手绢的同学

将手绢传递给其左手边(逆时针)第一位未拿手绢的同学

现在体育老师给同学们一个问题:最少需要多少秒才能让所有拿手绢的同学靠在一起?

作为蓝桥学院最聪明的学生,请你回答这个问题。

输入格式:

第一行输入一个整数N(1 <= N <= 10^5)表示同学的数量;

第二行输入一个长度为N的字符串S(Si属于[0,1]),Si = 0表示第i为同学未拿手绢,Si = 1表示第i位同学拿手绢。

输出格式:

输出一个整数表示答案。

参考答案:

import os
import sys


n = int(input())
s = input()
l = s.find('0')
ans = 1
cur = 1
for i in range(l, n):
    if s[i] == s[i - 1] == '0':
        cur += 1        
    else:
        if cur > ans:
            ans = cur
        l = i
        cur = 1
    if cur > ans:
        ans = cur
    
print(s.count('0') - ans)

 好了,这篇是小白挑战赛,接下来我试试强者挑战赛。

那这篇就写到这里,下一篇继续!