一年一度的蓝桥杯省赛即将开赛,小蓝卧薪尝胆,目标直指省一。
为了实现这个宏伟目标,小蓝偷偷准备了一份 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.
蓝桥杯作为最热门的程序设计竞赛之一,主办方为了更好地评估选手的程序设计能力,新研制了一台用于检测选手程序设计能力的仪器。
主办方邀请了 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(这意味着今年的电子舞龙表演可能得换成传统的舞狮了️)。
输入一行,包含一个仅由 L
、R
、U
、D
所构成字符串 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)