蓝桥杯——习题集(python)

1.问题描述:

一年一度的蓝桥杯省赛即将开赛,小蓝卧薪尝胆,目标直指省一。

为了实现这个宏伟目标,小蓝偷偷准备了一份 NN 行的代码模板,分别写在 NN 张草稿纸上(每张草稿纸上都写有一行代码,并用 11 到 NN 的数字标记了每一行代码的行号)然后偷偷带入了考场(没错,小蓝作弊了)。

然而,命运弄人!当小蓝从口袋里掏出草稿纸时,竟发现草稿纸的顺序全乱了(毫无规律地堆叠在一起,例如,最顶端可能是行号为 77 的草稿纸,其下依次是行号为 99 、行号为 22 的草稿纸)。

为了不被监考老师发现,小蓝决定进行如下操作:

  • 将任意一张草稿纸抽出来,放到最上面。

请问,小蓝最少需要多少次这样的操作,才能将代码按照行号 11 到 NN 从上往下的顺序排列好呢?

输入格式

第一行输入一个整数 NN(1≤N≤2×1051≤N≤2×105),表示草稿纸的数量,也就是代码的行数。

接下来一行包含 NN 个整数,以空格隔开,依次表示混乱堆叠的草稿纸从上往下的行号排列情况。

输出格式

输出一个整数,表示小蓝的最少操作次数。

样例输入

5
1 2 4 5 3

样例输出

3

代码: 

n = int(input())
gaps = list(map(int,input().split()))

max_element = n
cnt = 0
while gaps:
    if gaps[-1] != max_element:
        cnt += 1
    else:
        max_element -= 1
    gaps.pop()
print(cnt)

 思路:表示小蓝的最少操作次数,则按照倒序进行遍历,如果当前gaps[-1]=max_element,说明这个元素位置正确,无需操作;否则,这个元素则需要发生移动,操作数+1.

2.题目描述:

蓝桥杯作为最热门的程序设计竞赛之一,主办方为了更好地评估选手的程序设计能力,新研制了一台用于检测选手程序设计能力的仪器。

主办方邀请了 NN 位同学进行检测,以验证机器的准确性。检测结果表示为数组 AA,其中第 ii 位同学检测出的能力值为 AiAi​。

得知这一检测结果后,蓝桥杯的出题人小蓝获得了出题灵感。他希望统计满足以下条件的正整数对 (a,b)(a,b) 的数量,这些数对被称为 "完美数对":

完美数对定义:对于数对 (a,b)(a,b),若在数组 AA 中,数值 aa 至少出现了 bb 次,且数值 bb 至少出现了 aa 次,则数对 (a,b)(a,b) 被称为完美数对。

现在,请您协助小蓝解决这个问题。

输入格式

第一行输入一个整数 N(2≤N≤106)N(2≤N≤106) 表示接受检测的同学数量。

第二行输入 NN 个整数 A1,A2,A3,⋯,AN(1≤Ai≤106)A1​,A2​,A3​,⋯,AN​(1≤Ai​≤106) 表示每位同学的能力值。

输出格式

输出一个整数表示答案。

样例输入

5
1 1 2 2 3

样例输出

4

样例说明

对于样例,数对 (1,1),(1,2),(2,1),(2,2)(1,1),(1,2),(2,1),(2,2) 满足条件,所以答案为 44

代码:

import os
import sys
from collections import Counter

ans=0
n=int(input())
a=list(map(int,input().split()))
#Counter统计a中每个元素出现的次数
#dic是个字典 键是元素,值是出现次数
dic=Counter(a)
for i in dic:
  for j in range(1,dic[i]+1):  
    if j in dic and dic[j]>=i:
      ans+=1
print(ans)

问题描述

话说这年头,连舞龙都得电子化!这不,蓝桥村的老程序员王大爷突发奇想,用 LED 灯带和一堆传感器鼓捣出了一条“电子舞龙”,它能根据程序指令在村里的广场上“翩翩起舞”。

广场被王大爷抽象成一个二维坐标系,龙头从坐标原点 (0,0)(0,0) 出发,根据接收到的指令移动:

  • L - 龙头向左移动一格。
  • R - 龙头向右移动一格。
  • U - 龙头向上移动一格。
  • D - 龙头向下移动一格。

秉承着“龙归故里,新年新气象”的寓意,王大爷希望龙头在完成一系列眼花缭乱的舞动后,能够精准地回到最初的起点 (0,0)(0,0)。

然而,计划赶不上变化,就在演出即将开始之际,一个熊孩子趁王大爷不注意,偷偷修改了电子舞龙的控制指令!这下可好,原本完美的程序被改得乱七八糟,龙头跳完舞后,估计得跑到隔壁村去拜年了!

王大爷拿到被熊孩子涂改过的指令,他知道其中有一些指令是错误的,需要修改一些指令才能让电子龙回到原点。例如,他可以把 L 指令改成 R,或者把 U 改成 D,诸如此类。

现在,请你帮助王大爷计算出最少需要修改多少次指令,才能让电子龙头顺利回到起始点 (0,0)(0,0)。如果无论怎么改都无法回到起始点,请输出 −1−1(这意味着今年的电子舞龙表演可能得换成传统的舞狮了️)。

输入格式

输入一行,包含一个仅由 LRUD 所构成字符串 SS(1≤∣S∣≤1051≤∣S∣≤105),表示被熊孩子修改过的错误指令。

输出格式

输出一个整数,表示最少需要修改的指令次数。如果无论如何都无法回到起始点,输出 −1−1。

样例输入

LLUU

样例输出

2
import os
import sys

s=input()
l=s.count('L')
r=s.count('R')
u=s.count('U')
d=s.count('D')
lr=abs(l-r)
ud=abs(u-d)
if lr%2==0 and ud%2==0:  #相对方向
  print(lr//2+ud//2)
elif lr%2 and ud%2:   #相对方向外,各余1
  print(lr//2+ud//2+1)   #余的,进行一次操作进行抵消
else:
  print(-1)

你可能感兴趣的:(算法,蓝桥杯)