Python解题 - CSDN周赛第35期 - 不算题解的题解

本期四道题还是全考过,题解在网上也都搜得到。。。只好继续水一份不算题解的题解。 


第一题:交换后的or

给定两组长度为n的二进制串,请问有多少种方法在第一个串中交换两个不同位置上的数字,使得这两个二进制串“或”的结果发生改变?

输入描述:一个整数n (2≤n≤10^5)。接下来两行两个长度是n的01字符串,分别是题目描述的第一个串与第二个串。

输出描述:一行一个数字,方案数量。

示例:

示例
输入5
01011
11001
输出4

分析

很久以前考过(少说也有半年了吧?),那时问哥还对系统的算法理论没有多少概念,只是简单地把所有题目都当做脑力训练,做完也不会去总结。这道题现在看来很简单,但当时做出来还是挺有成就感的。

题目要求二进制“或”的结果发生改变,显然要实现这个要求,只有两种可能:

  1.  “或”的结果从0变成1 --> 0, 0 变成 1, 0 或 0, 1 或 1, 0
  2. “或”的结果从1变成0 --> 1, 0 或 0, 1 或 1, 1 变成 0, 0 

但是题目要求只改变第一个串,所以只要考虑第一个串的变化,也就只有两种可能:

  1. 从 0, 0 变成 1, 0 --> 将第一个串的 0 换成其他位置的 1 
  2. 从 1, 1 变成 0, 1 --> 将第一个串的 1 换成其他位置的 0

但是这里有个坑,就是这两种可能重复计算了 0 和 1 交换后结果相同的情况。比如例子中 01011 和 11001,第一个串如果变成 01101 ,也就是第 3 位的 0 和第 4 位的 1 交换位置的话,会被统计两次,但“或”的结果相同。

解决办法就是,在第一种可能里只换形成 1, 1 位置的 1,这样交换后,原位置的“或”结果不会改变。或者在第二种可能里只换形成 0, 1 位置的 0,理由相同。


第二题:争风吃醋的豚鼠

N个节点两两建边。不存在3个节点相互之前全部相连(3个节点连接成环)。最多能建立多少条边?

分析

15 期考过,可以参考其他人的文章,或问哥之前写的题解。但是值得一提的是,本题存在 O(1) 的解法。


第三题:最长递增的区间长度

给一个无序数组,求最长递增的区间长度。如:[5,2,3,8,1,9] 最长区间 2,3,8 长度为 3(注意:测试用例仅做参考,我们会根据代码质量进行评分)

输入描述:第一行输入整数n。(1<=n<=10000)表示数组的大小。第二行给出n个整数a。(-1e9<=a<=1e9)

输出描述:输出答案。

示例:

示例
输入6
5 2 3 8 1 9
输出3

分析

模板题。不用分析了,维护两个变量,一个表示最长当前连续递增区间的长度,一个表示所有递增区间里最长的长度,遍历数组,最后输出答案即可。


第四题:因数-数字游戏

小Q的柠檬汁做完了。掏出了自己的数字卡牌,想要和别人做数字游戏。可是她又不想要输掉游戏。她制定好规则,每次每个人只能把这个牌换成它的因子的某个牌。但是这个因子不能是1或者整数本身。现在给出整数n,两个人开始做游戏,先手在最优策略状态下能否必胜。

分析

14 期考过。还是可以参考问哥以前写的题解,虽然那时的经验还远不如现在。


一点点思考 - 不算总结的总结

陆陆续续参加了C站三十多场比赛(应该是只有两次没参加),稀里糊涂混了个积分榜第一名。我自知其实自己的实力远远配不上,所以线下也一直在对相关的算法知识点进行恶补学习。从这一点来看,我要感谢C站,通过比赛,认识到自己的不足,从而奋起直追,以赛代练,真正从比赛中获益。

半年过去了,我也做完了C站每日一练现有的所有题目(一百多道),并在其他刷题网站刷了不少题,收获颇丰。但是通过比较,发现C站的题目质量确实不高,当有了一定的基础知识后,很难再通过C站的题目来进步了。这还没有提到C站OJ系统的各种Bug,题目描述以及测试数据的各种歧义和错误。未来如果C站想把比赛办好,不仅提高题目的质量和数量,还要对已经存在的问题及时进行修正,但从目前的反馈来看,还有很长的路要走。

好了,字数差不多水够了。实在没什么好写的了,因为比赛会用到以前考过的题目,也就是说今天考过的,以后还有可能遇到。所以,以后的题解将主要以思路为主,文中尽量少放代码。至于那一百多道已通关的每日一练的题目,问哥打算有时间单独再开个专栏。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请叫我问哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值