当前位置: 首页 > news >正文

16届蓝桥杯pythonB国赛

16届蓝桥杯pythonB国赛

image

image

ans=0
for i in range(1,2026):for j in range(i+1,2026):k=j+j-iif k<=2025:ans+=1
print(ans*2)

3.这道题好像错了

image

def os(n):cnt=0is_upper=Falseis_lower=Falseis_digit=Falsefor i in n:if i in '0Oo':#判断可替换字符cnt+=1continue#判断固定的字符if i.isdigit():is_digit=Trueif i.isupper():is_upper=Trueif i.islower():is_lower=Truemiss=0if not is_upper:miss+=1if not is_lower:miss+=1if not is_digit:miss+=1if miss==0:print(0)elif cnt>=miss:print(miss)else:print(-1)
n=int(input())
for _ in range(n):key=input().strip()os(key)

image

import sys
data=list(map(int,sys.stdin.read().split()))
n=data[0]
m=data[1]
a=data[2:2+m]
vis=[0]*(n+2)
for x in a:vis[x]=1# dp[i] = 前 i 个灯塔中,最多能点亮几个
# 只保留最近两个值:pre2 = dp[i-2], pre1 = dp[i-1]
pre2,pre1=0,0 #相当于初始dp[0],dp[1](还没算)
for i in range(1,n+1):if not vis[i]:cur=pre1else:#点亮ia=pre2+1#不点亮ib=pre1cur=max(a,b)pre1,pre2=cur,pre1  #滚动更新
print(pre1)

image

x=int(input())
l=x.bit_length()  #二进制长度
k=bin(x).count('1')   #二进制1的个数
print(x-2**(l-k)+1)

image

import math
from itertools import permutationsn=int(input())
ans=float('inf')
cur_gcd=-1# 预计算 10 的幂
pow10 = [1]
for _ in range(10):pow10.append(pow10[-1] * 10)for p in permutations(range(1,9)):#从小到大全排列1-8num=0for i in p:num=num*10+i#插入for j in range(9):  #0=前,8=后pre=num//pow10[8-j]r=num%pow10[8-j]l=pre*pow10[9-j]#左移留出空间for k in range(1,9):new_num=l+k*pow10[8-j]+r   g=math.gcd(n,new_num)if g>cur_gcd or (g==cur_gcd and new_num<ans):cur_gcd,ans=g,new_numprint(ans)

image

import sys
import heapqdata = list(map(int, sys.stdin.read().split()))
n, c, b = data[0], data[1], data[2]
s = data[3:3 + n]
a = data[3 + n:3 + 2 * n]dun=min(b,c)# 初始护盾受上限约束
heap=[]     # 要求大根堆(需用负数模拟)
ans=0for i in range(n):before=dun         #增幅时用dun=min(dun+s[i],c)#先不增幅# 计算实际增幅if s[i]>0:extra=min(s[i],c-before-s[i])if extra>0:heapq.heappush(heap,-extra)while dun<a[i]:if not heap:print(-1)sys.exit()extra=-heapq.heappop(heap)dun=min(dun+extra,c)ans+=1if dun==c:heap.clear()# 后续房间无法再从之前的增幅中获益,清空堆
print(ans)

image

import sys
from math import gcddata = list(map(int, sys.stdin.read().split()))
n, k = data[0], data[1]
t, c, r = [], [], []  # 工作周期,充电时间,数量
pos = 2
for _ in range(n):t.append(data[pos])c.append(data[pos + 1])pos += 2
for _ in range(n):r.append(data[pos])pos += 1# 所有机器人的负载
machine = []
for i in range(n):load = c[i] / t[i]for _ in range(r[i]):machine.append(load)
# 二分法找最小负载率
l = 0
r = 1
while r-l>1e-7:mid = (l + r) / 2rest = [mid] * k  # 充电站剩余容量ok=True# 贪心,放机器for m in sorted(machine,reverse=True):rest.sort()if rest[-1] < m - 1e-12:ok=Falsebreakrest[-1] -= mif ok:  # 全部放下,尝试更小r = midelse:  # 放不下l = mid
print(round(r*100))

image
贪心没有答对所有样例

image

import syssys.setrecursionlimit(1000000)
data = list(map(int, sys.stdin.read().split()))
n, m = data[0], data[1]
removed = [set() for _ in range(n + 1)]
pos = 2
for _ in range(m):u, v = data[pos], data[pos + 1]pos += 2removed[u].add(v)removed[v].add(u)
# 未访问节点信息
unvisited = set(range(1, n + 1))
components = []for start in range(1, n + 1):if start not in unvisited:continue# bfsq = [start]unvisited.remove(start)comp = []for u in q:comp.append(u)nodes = []  # 之后要拜访的点for v in unvisited:if v not in removed[u]:nodes.append(v)for v in nodes:unvisited.remove(v)q.append(v)  # q追加新元素,还会继续遍历comp.sort()components.append(comp)
components.sort(key=lambda x: x[0],reverse=False)print(len(components))
for i in components:print(len(i),end=' ')print(' '.join(map(str, i)))

image
跑出了70%样例