蓝桥训练第一周

前面三个题属于基础题,第五题是并查集模板题,第四题是一个比较有意思的贪心题

7-1 在群里做复读机

【超级签到题】

输入一些正整数,将它们原样输出。

输入格式:

第一行一个正整数 T ,表示有 T 组测试数据。 接下来 T 行,每行一个正整数a 。

输出格式:

输出 T 行,每行一个正整数 a 。

输入样例1:

在这里给出一组输入。例如:

3
1
2
3

输出样例1:

在这里给出相应的输出。例如:

1
2
3

输入样例2:

1
1000000000000000000000000000000000

输出样例2:

1000000000000000000000000000000000

 答案:

T = int(input())
for i in range(T):
     n = input()
     print(n)

 

7-2 在猴子前吃桃

【签到题】

这是一个编程题模板。请在这里写题目描述。例如:本题目要求读入2个整数A和B,然后输出它们的和。

一只小猴买了若干个桃子。第一天他刚好吃了这些桃子的一半,又贪嘴多吃了一个;接下来的每一天它都会吃剩余的桃子的一半外加一个。第 n(n≤20) 天早上起来一看,只剩下 1 个桃子了。请问小猴买了几个桃子?

输入格式:

整数n。

输出格式:

桃子数,一个整数

输入样例:

在这里给出一组输入。例如:

4

输出样例:

在这里给出相应的输出。例如:

22

答案:

n = int(input())
s = 0
for i in range(1, n + 1):
    if s == 0:
        s = 1
    else:
        s = (s + 1) * 2
print(s)

 

7-3 在图书馆里做运维

图书管理是一件十分繁杂的工作,在一个图书馆中每天都会有许多新书加入。为了更方便的管理图书(以便于帮助想要借书的客人快速查找他们是否有他们所需要的书),我们需要设计一个图书查找系统。

该系统需要支持 2 种操作:

add(s) 表示新加入一本书名为 s 的图书。

find(s) 表示查询是否存在一本书名为 s 的图书。

输入格式:

第一行包括一个正整数 n ,表示操作数。 以下 n 行,每行给出 2 种操作中的某一个指令条,指令格式为:

 
add s
find s

在书名 s 与指令(add,find)之间有一个隔开,我们保证所有书名的长度都不超过 200。可以假设读入数据是准确无误的。

输出格式:

对于每个 find(s) 指令,我们必须对应的输出一行 yes 或 no,表示当前所查询的书是否存在于图书馆内。

注意:一开始时图书馆内是没有一本图书的。并且,对于相同字母不同大小写的书名,我们认为它们是不同的。

输入样例:

在这里给出一组输入。例如:

4
add Inside C#
find Effective Java
add Effective Java
find Effective Java

输出样例:

在这里给出相应的输出。例如:

no
yes

数据范围

n<=30000

答案:

n = int(input())
nums = []
for i in range(n):
    inderation = input()
    nums.append(inderation)
lst = set()
for index in nums:
    if index[0] == "a":
        lst.add(index[4:])

    elif index[0] == "f":
        if index[5:] in lst:
            print("yes")
        else:
            print("no")






7-4 在操场种树

通往操场的路被划为 n 条路段,这 n 条路段依次编号为 1...n 。每个路段最多可以种一棵树。现在居民们给出了h组建议,每组建议包含三个整数b,e,t表示居民希望在路段b 到e 之间至少要种 t棵树。这些建议所给路段的区间可以交叉。请问:如果要满足所有居民的建议,至少要种多少棵树。

输入格式:

第一行为 n,表示路段数。

第二行为 h,表示建议数。

下面 h 行描述一条建议:b,e,t用一个空格分隔。

输出格式:

输出只有一个数,为满足所有居民的建议,所需要种树的最少数量。

输入样例:

在这里给出一组输入。例如:

9
4
1 4 2
4 6 2
8 9 2
3 5 2

输出样例:

在这里给出相应的输出。例如:

5

答案:

n = int(input())
h = int(input())
nums = []
for i in range(h):
    intent = tuple(map(int, input().split()))
    nums.append(intent)
nums.sort(key=lambda x: x[1])
visit = [0] * (nums[-1][1] + 1)
tmp = nums[0][1]
for _ in range(nums[0][2]):
    visit[tmp] = 1
    tmp -= 1
for j in range(1, h):
    t = nums[j][2]
    if sum(visit[nums[j][0]: nums[j][1] + 1]) >= t:
        continue

    if nums[j][0] > nums[j - 1][1]:
        for q in range(nums[j][1], nums[j][0] - 1, -1):
            visit[q] = 1
            t -= 1
            if t == 0:
                break
    else:
        for q in range(nums[j][0], nums[j][1] + 1):
            if visit[q] == 1:
                t -= 1
            else:
                q_index = nums[j][1]
                visit[q_index] = 1
                t -= 1
                q_index -= 1
            if t == 0:
                break
print(sum(visit))

7-5 在并查集前找关系

题目描述 这是一道模板题。

维护一个 n 点的无向图,支持:

加入一条连接 u 和 v 的无向边 查询 u 和 v 的连通性

由于本题数据较大,因此输出的时候采用特殊的输出方式:用 0 或 1 代表每个询问的答案,将每个询问的答案依次从左到右排列,把得到的串视为一个二进制数,输出这个二进制数 mod 998244353 的值。

输入格式:

第一行包含两个整数 n , m ,表示点的个数和操作的数目。

接下来 m 行每行包括三个整数 op, u , v 。

如果 op = 0,则表示加入一条连接 u 和 v 的无向边;

如果 op = 1,则表示查询 u 和 v 的连通性。

输出格式:

一行包括一个整数表示答案。

输入样例:

在这里给出一组输入。例如:

3 6
1 1 0
0 0 1
1 0 1
1 1 2
0 2 1
1 2 1

输出样例:

在这里给出相应的输出。例如:

5

答案串为 0101。

数据范围与提示

n<=4000000,m<=8000000

答案:

m, n = map(int, input().split())
nums = []
for _ in range(n):
    data = list(map(int, input().split()))
    nums.append(data)
dic = {}
bin_CE = ""
for i in range(n):
    if nums[i][0] == 0:
        dic[nums[i][1]] = nums[i][2]
        dic[nums[i][2]] = nums[i][1]
    elif nums[i][0] == 1:
        try:
            if dic[nums[i][1]] == nums[i][2] or dic[nums[i][2]] == nums[i][1]:
                bin_CE += "1"
        except KeyError:
            bin_CE += "0"


def func(s):
    num = 0
    j = 0
    for index in s:
        num += int(index) * 2 ** (len(s) - j - 1)
        j += 1
    return num


print(func(bin_CE) % 998244353)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一份可能的蓝桥杯赛前训练计划: 1. 熟悉考试内容和题型:了解蓝桥杯考试的内容和题型,包括编程语言、数据结构算法、计算机基础知识和实践能力等方面的内容,并准备相关资料和练习题目。 2. 制定学习计划:根据自己的水平和时间安排,制定一份具体的学习计划,包括每天的学习目标、练习时间和计划完成时间等,以保证充分利用时间进行学习和练习。 3. 提高编程能力:进行编程练习,提高编程能力,特别是数据结构算法的实践能力。可以参加在线编程竞赛、练习题目和刷题等方式来提高编程能力。 4. 提高计算机基础知识:学习计算机基础知识,包括计算机组成原理、操作系统、计算机网络、数据库等方面的知识,以提高程序的效率和优化能力。 5. 实践能力:进行实践练习,包括操作系统和网络配置、数据库设计和开发、Web开发等方面的实践,以提高实践能力和解决问题的能力。 6. 团队协作:参加团队协作项目,锻炼团队合作和沟通能力,同时学习项目管理和软件开发流程等相关知识。 7. 模拟考试:进行模拟考试,以检验自己的学习成果和考试准备情况,同时找出自己的弱点和不足,加以改进和提高。 8. 调整状态:保持良好的身体状态和心态,保证充足的睡眠和饮食,调整好心态,保持积极向上的心态。 以上是一份可能的蓝桥杯赛前训练计划,具体的训练计划需要根据个人情况和水平来制定。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

python改变世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值