- 博客(7)
- 收藏
- 关注
原创 Codeforces Round 667 (Div. 3) C. Yet Another Array Restoration
最大数尽可能小,自然想到间隔尽可能小,但是又不一定。首先虽然说给出了两个数x,y,但其实还有一个边界限制1,现在就有三个区域,1-x,x-y,y-…我们可以遍历间隔(因为这题数据量不大),只有能整除y-x的才有机会成为间隔,还有一个限制是加入这个间隔后x-y之间的长度不能超过n,然后不断比较最大数的大小,并记录此时的间隔。关于数列的构造方式,得到一个间隔后先必须填满x-y,然后n还有剩就填1-x,此时有两种情况:不够填满1-x,或者填满了1-x,继续排到y之后。
2024-09-03 20:20:56
134
原创 Codeforces Round 649 (Div. 2) A. XXXXX(思维、双指针)
最后考虑从两侧向中间的双指针(虽然滑动窗口也是双指针),题目要求的是最大长度,而不是最大和,那么有可能我们可以先看最大长度成不成立,再逐渐缩小。能成功的关键在于:一个和能被x整除的子数组,减去一个x的倍数后仍然能被整除,除非减去一个非x的倍数。第一眼看到子数组、条件和最值,就想到滑动窗口,但是写着写着就发现问题(甚至中间还把while里的&&写成逗号),和不能被x整除是一个比较特殊的条件,一般的滑动窗口,扩大窗口时值增加,缩小窗口值减少,而我们不知道到底是要扩大还是缩小窗口来使得它不能被x整除。
2024-09-03 20:03:45
85
原创 Codeforces Round 460 (Div. 2) B. Perfect Number(暴力/思维)
由于题目范围比较小,可以暴力遍历。也可以考虑,当数字这种连续的东西和离散的条件结合起来时,可能有规律,比如说加上9,一般情况下十位进一,个位减一,那么和就不变,不过要考虑个位是0,和后两位是91的情况。从0开始,找第k个各位数之和得零的数。
2024-09-02 21:33:31
170
原创 Codeforces Round 970 (Div. 3) D. Sakurako‘s Hobby(并查集)
这题降低复杂度的关键在于,相互之间有联系的数字间结果是相同的,就是求等价类,用并查集将能连在一起的数字分类,再遍历1-n,使用一个哈希表或者向量存储答案,每遍历到一个数,它所对应根(find(i))的数值加一,最后输出每个数字对应根的数值。(本来用深度优先搜索,因为再怎么移动都会被限制在数组内,不会越界,所以肯定会产生循环,如果碰到已经搜过的数,也就是根相同,就退出。不过这样写不如并查集简洁,因为数字两两之间的联系,在遍历完数组之后肯定会遍历到)求每个数组里的数字各与多少个黑色数字有关系。
2024-09-02 21:19:16
150
原创 Codeforces Round 970 (Div. 3) C. Longest Good Array
间隔尽可能小数列就尽可能长,如1 2 4 7…间隔是等差数列,最后达到的数字就是等差数列求和。遍历长度n,不断增大,知道超出范围r。找一定范围内递增且间隔递增的数列的最大长度。
2024-09-02 21:04:11
153
原创 Codeforces Round 970 (Div. 3) B. Square or Not
n)return false),然后分类判断1和0就行。如果是在边上的看是不是1,否则看是不是0。先判断是不是方的,就看n是不是完全平方数(int sq=(int)sqrt(n);判断一串字符是否能构成边上是1,里面是0的方块。
2024-09-02 20:54:18
187
原创 Codeforces Round 970 (Div. 3)A. Sakurako‘s Exam
1是很简单判断的,如果1有偶数个,那么它们自己可以消掉;如果1有奇数个,那么非但自己不能消掉,2也不可能消掉它们。有偶数个2时可以自己消掉,奇数个时肯定会剩余一个2,这时只要1为偶数且大于2就能消掉。有一堆1和2,要求判断它们加加减减是否能为0。
2024-09-02 20:41:47
82
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人