ARC080F Prime Flip 题解

传送门

题意:给定初始 a 数组,每次可以选一个长度为奇质数的区间取反。问全变成 0 要多少次操作。

和 Password、Xor Replace 的套路相同,做一个差分。

bi=aiai1,目的就是让 b 数组变为全 0。对 aiai+p1 取反相当于对 bi,bi+p 取反。显然 b 中有偶数个 1

一次操作可以让 bi,bj 取反,要求 ji 是奇质数。

最终的操作可以看作把 b 中所有 1 两两匹配,然后每一对 1 消耗若干次操作变成 0

考虑两个位置 i,j 需要多少次操作才能一起变 0

  1. ji 为奇质数。显然一次即可。

  2. ji 为大于 4 的偶数。根据哥德巴赫猜想:大于 4 的偶数可以分成两个奇质数之和。 所以两次即可。一次显然不够,因为加一个奇质数后奇偶性不对。

  3. ji 为奇合数,3 次操作。一次操作变回 2 的情况。

  4. ji=2ji=4。对于 ji=2,因为 2=53,两次;ji=4,因为 4=73,两次。不如把该情况和情况 2 合并。

要操作次数最少,显然尽量选择情况 11 也不会干扰到情况 2,3)。

于是把 b 中所有 1 的位置找出来,分成奇数偶数的二分图。如果两个位置差为奇质数,连边。

先求个最大匹配,就是情况 1 的个数。然后让奇数偶数各自内部尽量匹配,对应情况 2。最后让剩下的奇数偶数之间匹配,对应情况 3

posted @   FLY_lai  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验
点击右上角即可分享
微信分享提示