当前位置:   article > 正文

第十四届蓝桥杯大赛软件赛国赛Python大学B组_蓝桥杯第十四届pythonb国赛

蓝桥杯第十四届pythonb国赛

弹珠堆放

  1. sum=1
  2. n=1
  3. cnt=1
  4. while sum<=20230610:
  5. n+=1
  6. cnt+=n
  7. sum+=cnt
  8. print(n-1)

划分

两个集合的权值差最小的时候,两个集合的权值乘积最大,利用背包去划分两组集合,从而得到权值最大的情况。(参考佬的ac代码)lanqiao2159490285

  1. s="5160 9191 6410 4657 7492 1531 8854 1253 4520 9231 1266 4801 3484 4323 5070 1789 2744 5959 9426 4433 4404 5291 2470 8533 7608 2935 8922 5273 8364 8819 7374 8077 5336 8495 5602 6553 3548 5267 9150 3309"
  2. lst=[]
  3. for i in s.split(" "):
  4. lst.append(int(i))
  5. #print(lst)
  6. bag=sum(lst)//2
  7. dp=[[0]*(bag+1) for i in range(41)]
  8. for i in range(1,41):
  9. cur=lst[i-1]
  10. for j in range(1,bag+1):
  11. if j-cur>=0:
  12. dp[i][j]=max(dp[i-1][j-cur]+cur,dp[i-1][j])
  13. a=max(dp[40])
  14. b=sum(lst)-a
  15. print(a*b)

偶串

pypy3能过90%样例,有一个运行超时

  1. def cnt(x):
  2. for i in x:
  3. if x.count(i)%2!=0:
  4. return False
  5. else:
  6. return True
  7. s = input()
  8. lst = []
  9. if len(s)%2 != 0:
  10. print("NO")
  11. else:
  12. if cnt(s):
  13. print("YES")
  14. else:
  15. print("NO")

看了破烂小狗的解法,用了异或

任意两个相同的数异或的值为0,偶数个相同的数异或的值也是0;遍历一遍如果结果为0那么所有的字符偶数,否则则是奇数(实在是优雅)

  1. ans = 0
  2. s = input()
  3. for i in s:
  4. ans ^= ord(i)
  5. print("NO" if ans else "YES")

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/728372
推荐阅读
相关标签
  

闽ICP备14008679号