Acwing 蓝桥杯试题 笔记

简介: Acwing 蓝桥杯试题 笔记

本篇为笔记非题解 描述较为简略

d71d4dc877f54540b578ab873e5d07ef.png

全排列 itertools中的permutations 做题时要想清楚是排列还是组合

不论是列表还是字符串 调用permutations or combinations 返回每个元素以元组形式存在

import itertools
s=[1,2,3,4,5]
for i in itertools.permutations(s,5):
    print(i)
#输出
#(1, 2, 3, 4, 5)
#(1, 2, 3, 5, 4)
#(1, 2, 4, 3, 5)
#(1, 2, 4, 5, 3)....
a="12345"
for i in itertools.permutations(a,5):
    print(i)
#输出
#('5', '3', '4', '1', '2')
#('5', '3', '4', '2', '1')
#('5', '4', '1', '2', '3')
#('5', '4', '1', '3', '2')

唯一区别在于 元素的组成部分是数字还是字符串


permutations(combinaitons)(序列,生成元素长度) 如果生成元素长度为序列长度,可以省略。


如何将一个序列作为数字输出?


如果生成的序列都是数字 可以通过循环s=s*10+a[i] 实现


如果生成的序列都是字符串 可以通过int(''.join(序列))


本题关键点在于 通过分割序列 ,切分得到a,b,c


在取分割点的时候 我们只关心其个位上的数字


这道题的题解思路来源:蓝桥杯-带分数-python_晓宜的博客-CSDN博客在ACWing已经AC,蓝桥杯评判系统有一点问题据说导致超时。


8f8b3b65eb174615850d1cd4aee6a9c0.png


一开始看到这题,没想法。感觉这是一道物理题撞来撞去。


后来看了别人的分析,懂了其实有时候没必要把问题想的太复杂,转换一下就简单了。


感冒A对撞上健康B 两者反向跑 等效于各自继续朝着原来的方向向前跑只不过B也感冒了


所以无论怎么撞 都可以把每个蚂蚁看作单向运动 那么必然都能跑到端点


如果和A面对面的有n个蚂蚁,那么这n个蚂蚁势必会影响到跟在A屁股后的m个蚂蚁


那么就一共有m+n+1个蚂蚁感冒了 ,其他的蚂蚁感冒不着。


所以当觉得问题过于复杂了,很有可能是自己想得太复杂了,换一个想法,就好了。


小郑AC代码:

#能感染 只能是反向跑
n=int(input())
l=list(map(int,input().split()))
right,left=0,0
p=l[0]
for i in range(1,len(l)):
    if p>0:#第一个蚂蚁向右走:如果结束循环right=0那么输出1
        if abs(l[i])>abs(p) and l[i]*p<0:
            right+=1#右侧蚂蚁感染数目
        elif abs(l[i])<abs(p) and l[i]*p>0:
            left+=1#左侧蚂蚁感染数目
        else:
            pass
    else:#第一个蚂蚁向左走:如果结束循环left=0那么输出1
        if abs(l[i])>abs(p) and l[i]*p>0:
            right+=1#
        elif abs(l[i])<abs(p) and l[i]*p<0:
            left+=1
        else:
            pass
print(right+left+1) if right*left!=0 else print(1)

其次要注意严谨,第一个蚂蚁的朝向也会影响结果,不能草率下结论。

埃筛法板子:

max=int(input())
prime=[0 for i in range(max+1)]
def generate_prime():
    cnt=0#素数个数
    is_prime=[1 for i in range(max+1)]#1标记素数,0标记非素数
    is_prime[0]=is_prime[1]=0#0,1不是素数
    for i in range(2,max+1):
        if is_prime[i]==1:#是素数
            cnt+=1
            prime[cnt]=i
            j=i
            while j<=max:
                is_prime[j]=0
                j+=i#把i的倍数标记为非素数
    return cnt
cnt=generate_prime()
for i in range(1,cnt+1):a
    print(prime[i],end=' ')
#输出0~max的素数一般步骤
#两个容器 prime,is_prime prime[i]代表第i个素数,is_prime[i]代表第i是否为素数
#0还是1?
#一个计数器cnt 关联到prime下标,初始化为0
#遍历2到max 如果i是素数,1:那么通过cnt计入prime
#2:从[i,max]的范围内把i的倍数is_prime标记为非素数
#总结:两个容器  一个计数器

树的直径:某乎链接【朝夕的ACM笔记】树上问题-树的直径 - 知乎 (zhihu.com)  

更推荐去看下面这个姐姐讲解,很细致,慢慢地讲,对新手很友好

相关文章
|
5月前
|
人工智能 算法 Java
第十三届蓝桥杯B组Java(试题C:字符统计)
第十三届蓝桥杯B组Java(试题C:字符统计)
81 0
|
5月前
|
机器学习/深度学习 人工智能 算法
2024 蓝桥杯本科B组试题
2024 蓝桥杯本科B组试题
46 0
蓝桥杯Java-B组2015年试题解题笔记
蓝桥杯Java-B组2015年试题解题笔记
|
数据格式
蓝桥杯Java-B组2014年试题解题笔记(下)
蓝桥杯Java-B组2014年试题解题笔记(下)
|
5月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-940 试题3971
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-940 试题3971
56 0
|
5月前
|
Java C语言 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-试题 基础练习 十六进制转八进制
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-试题 基础练习 十六进制转八进制
35 0
|
5月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-试题 基础练习 数列排序(四种语言对照)
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-试题 基础练习 数列排序(四种语言对照)
37 0
|
5月前
|
Python
第十三届蓝桥杯B组python(试题A:排列字母)
第十三届蓝桥杯B组python(试题A:排列字母)
55 0
|
5月前
|
Java
第十三届蓝桥杯B组Java(试题B:山)
第十三届蓝桥杯B组Java(试题B:山)
48 0
|
5月前
|
存储 Java API
第十三届蓝桥杯B组Java(试题A:星期计算)
第十三届蓝桥杯B组Java(试题A:星期计算)
58 0
下一篇
无影云桌面