AcWing2022春季每日一题,第一周题解
AcWing 3346. 你知道你的ABC吗—原题链接
题目标签:思维题 | 数学推理
思路:
由于7个数进行排序,第一个第二个数一定是a和b,第三个数有两种可能,要么是c,要么是a+b,如果是后者的话那么第四个数一定是c,也就是说进行一个小判断就行(某场cf的a题原题)
1 |
|
AcWing 3358. 放养但没有完全放养—原题链接
题目标签:字符串 | 模拟 | 贪心(?)
思路1:
题目要求输出唱了多少遍,也就是一共需要听几遍才能按顺序听完目标字符串,那么:
Q:为什么需要再听一边
A:因为当前遍历到的字母之后不存在下一个字母,所以需要再听一遍
Q:什么时候需要再听一遍
A:当前字母出现的位置在之前字母的前边或者相同,因为如果在后边的话继续听下去是可以听到的
因此本题就是根据每个字母的位置进行比对
1 |
|
(标答)思路2:
对上述的思路进行优化,字母顺序的比对直接遍历一遍就可以了
1 |
|
AcWing 3370. 牛年—原题链接
题目标签:(自以为是的)DFS | 模拟
思路1:
建图DFS, 虽然AC了但是是很绕弯子的思路拿到题的时候很自信的以为是图的深搜,结果敲了将近一个小时越来越觉得不对劲…虽说很别扭但是逻辑上可以说得通,并且很幸运的能够AC……坐等正解,看个乐子吧就当
1 |
|
(标答)思路2:
因为题目中保证了后者的名字一定在前面出现过,所以其实只要简单模拟就可以了不需要做图的搜索。
另外关于距离部分,只需要做一次同余方程就可以减少很多代码量
1 |
|
AcWing 3745. 牛的学术圈 I—原题链接
题目标签:双指针 | 模拟 | 枚举
思路:
我愿称之为本周最难的题
当然难的部分在于对于既定答案的判断对错方法,尽管很抽象但是逻辑性还是很强的
首先我们知道可以最多改变l次,在排好序的基础上,我们希望能充分利用这l次+1的机会就必须在同一段上,并且加上这一段之后h可以有效的加一
顺着这个思路,假定我们遍历到了h,我们需要先定位到值为h-1的部分(i指针)。在定位到大于等于h-1的部分(j指针),此时区间被分为3部分:
1-j的部分:这部分的值恒大于等于h,也就是从j开始向左的所有数都不需要变化
j-i的部分:这部分的值都大于等于h-1,也就是从i开始到j(不包含j)的所有数是需要变化的数
i-n的部分:这部分就算加了1也达不到h,也就是不需要变化的部分
如果我们假定的h成立,在将(j, i]的数加一之后,前h个数一定能保证大于h,也就是这个h成立了
1 |
|
AcWing 1459. 奶牛体操—原题链接
题目标签:枚举
思路:
满足题意的条件是,任意两个数,在所有排名中的先后次序都是一样的,其中一方指向另一方的方向不会变,因此可以开一个二位数组,横坐标指向纵坐标表示一次排名。
遍历结束后,如果只有一方指向另一方而没有反过来的方向,则成立。
1 |
|