今天全场极惨.
在此膜拜某位大佬,简单题不切,只切神题
贴题解
T1
题目大意:有无穷多个卡牌排成一排, 依次编号为 1-N,开始x1,x2,x3……xn正面朝上, 其它的牌反面朝上。每次操作可以选择1个奇质数p , 然后选择连续p张牌, 将其翻转。问将所有牌变为反面朝上的最少操作次数。n<=100,xi<=1e7。
题解:考虑差分,转换成点上的问题,一个点和下一个点不同则为 1,否则则为 0 。区间操作变成了两点的操作。
两个 1 之间的距离为奇质数,则选一个质数,直接覆盖就好,代价为一次操作。两个 1 之间的距离为偶数,两个奇质数相减或哥德巴赫猜想,操作代价为 2。两个 1 之间的距离为奇合数,则选一个奇质数和一个偶数,代价为3。
接下来可以跑一般图带权最大匹配,但有更简单的方法。仔细分析一下,在最优解中,两个 1 之间的距离为奇合数的情况最多出现一次。于是我们可以只考虑前两种操作,发现我们可以贪心,先尽可能多的第一种,再尽可能多第二种, 如果还有剩下的一对第三种。这样,把 1 的位置分奇偶,两次二分图上的匹配就行。
T1AC代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<queue>
#include<vector>
#include<cmath>
#include<set>
#include&l