Codeforces 800-1300 刷题笔记

1946B Maximum Sum

这道题是一道贪心题。

对于第 1 次操作,选择的话肯定是选最大的好,所以我们会找出原序列的最大子段和进行插入,为了使下一次的插入子段更大,所以我们一定会插入原序列的最大子段和中。进行 m 次操作,执行 m 次上述操作即可。

直接模拟的话肯定不行,我们考虑找找规律,由于每次插入都是插入现在序列的最大子段和中,所以每次插入的值都是翻倍增长的,易发现这是一个等比数列的求和。我们如果模拟上述操作,复杂度为 O(m),可以接受。

最后注意取模。

1004B Sonya and Exhibition

设区间 [l,r]1x 个,0y 个,当 xy 最接近的时候,x×y 最大,此结论可以用二次函数进行证明。接下来,考虑怎样构造使得 xy 最接近。策略是交替输出 01,这样做的正确性是显然的。

899C Dividing the numbers

一道很好的构造题。

f(x) 表示 n=x 时的答案。

x=0 时,f(x)=0

x=1 时,f(x)=1

x=2 时,f(x)=1

x=3 时,因为 3=1+2,所以 f(x)=0

x>3 时,因为有 (x1)+(x2)=(x3)+x,所以 f(x)=f(x4)

依据 nmod4 分类讨论即可。

如何证明次做法的正确性呢?令 a=i=1ni,如果 a 是奇数,那么最优答案就是 1,否则是 0,利用高斯公式依次计算出上述情况下的 a,并判断即可证明,在此不再赘述。

78B Easter Eggs

s=ROYGBIV,对于前 i 个彩蛋 (1in3),第 i 个为 s(i1)mod4,这样可以保证 [1,n3] 这段区间满足条件 2,对于后 3 个彩蛋,直接输出 BIV,这样就满足了条件 1,由我们的构造做法可知,[n6,n] 这个区间是 ROYGBIV[n2,4](题目要求是环)这段区间是 BIVROYG,都是符合条件的,故整个环符合条件 2,然后就做完了。

1759C Thermostat

分类讨论题

  • 如果 a=b,那么不需要移动,ans=0

  • 如果 |ab|x,移动 1 次就可以了,那么 ans=1

  • 为了使移动距离尽可能大,最好的方法是移动到边界,即先移动到 lr,再到 b,那么 ans=2。判断条件为 {alxblx 或者 {rbxrax

  • 如果上述情况还是不满足,我们可以通过两个端点进行 3 次移动,即 alrbarlb,判断条件为 {alxrbx 或者 {raxblx

由于两边端点都已经尝试过了,再移动已经没有意义了,故最多只能有 3 步,其余的情况都是无解,输出 1

1768B Quick Sort

易发现如果要让序列排序,那么原序列中 xx+1 之间的所有数字都是需要移动的,所以原序列中只有一个最长的连续上升子序列是不需要动的,设其长度为 m,那么需要移动的数字数量为 nm,由于每次可以移动 k 个且自动排序,故答案为 nmk

1832B Maximum Sum

比较坑的一道题,直接双指针模拟贪心是不行的。

先将序列排序,设大的数删了 x 个,那么小的数删了 2×(kx),由于它是从头和尾删数,所以我们可以确定删了那些,统计前缀和后缀和,枚举 x,更新答案即可。

1903B StORage room

考虑按位或运算的性质,即 ab 某一位上都为 0,那么它们或起来的那一位上也是 0,反之,如果 Mi,j 的第 x 位上是 0,那么 aiaj 的第 x 位上也是 0,所以我们可以先将 a 的每一位上都赋值为 1,再枚举 M,利用与运算执行上述操作(将 aiaj 与上 Mi,j,由于与是只有两个 1 才是 1,所以如果 Mi,j 的某一位上是 0,那么 aiaj 的相应位置上也是 0 了),最后将生成的 a 再代回检查一遍,如果不满足就是无解,否则输出即可。

1918B Minimize Inversions

a 数组排序,就可以最小化两个序列中逆序对的个数的和了,证明如下:

a 排序了之后,对于任意一对 ij,两数组中逆序对之和数量 x 最大为 1,当 x=0 时,交换后 x2,当 x=1 时,交换后 x1,所以再怎么交换都不可能更优了,故现在的序列即为最优解。

1335D Anti-Sudoku

直接将 1 改成 2(当然其他的数也行),数独的性质保证了这样做是对的。

62A A Student's Dream

可以先考虑男孩用左手握女孩的右手,设男孩左手有 a 根手指,女孩的右手有 b 根手指。

  • 先考虑女孩的两根手指中间必须有男孩的一根手指这个条件,可以将其类比成植树问题,女孩手指的间隙就是植数的地方,男孩的手指就是树,易发现女孩手指的间隙共有 b1 个,而男孩的手指则有 a 根,所以判断 ab1 即可。

  • 接下来再考虑男孩的三根手指之间必须有女孩的一根手指这个条件,在 b 尽可能多的情况下这个条件一定是满足的,所以考虑 b 最少时的情况,可以发现最优解是这样的:BBGBBGBBBBGBBB 是男孩,G 是女孩),所以如果 2×b+2a,那么这个条件就满足了。

如果以上两的条件都满足,那么男孩就可以用左手握女孩的右手,最后再判断男孩能否用右手握女孩的左手的情况,如果有一种情况是满足的,那么就是有解,否则就是无解

posted @   zhuluoan  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示