随笔分类 - 贪心
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 设k为最大的正整数满足 $2^0+2^1+...+2^k2^0+2^1+...+2^k$ 那么只用$2^0,2^1,...2^k$和$m (2^0+2^1+...+2^k)$这k+2个数就能表示出0..m这m+1个数字了。 (原
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 第一个位置确定了。 那么可以通过a[i 1]来推测出第i个位置应该放什么。 所以分两种情况就好。 第一个位置为0 或第一个位置为1 最多只有这两种可能。 判断合法性就好。 【代码】 cpp include define LL l
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 用小的质数去凑那个数字。 显然比用大质数去凑划算。 因为 对于$x = p1^{q1} p2^{q2} ... pn^{qn}$ x的因子个数等于(q1+1) (q2+1).... (qn+1); 显然 你用的质数越小。 这个指
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 思路来自hzwer.. 设xi表示第i个人往左传递了xi个糖果。 (如果小于0表示旁边的人给他了糖果。 则ans=∑|xi| 最后所有人的糖果数都变成sum/n avg 则 a1 x1+x2 = avg a2 x2+x3= av
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 会发现,如果把连续4个数字进行一次翻转的话。 假设这连续的4个数字的逆序数为x; 那么翻转过后,逆序数就会变成6 x; (最多6个逆序数,现在翻转了 那么这4个逆序数的变化为6 2x 显然变化值为一个偶数。 而1..l 1和r+
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 a1+a2+...+aka1a2=0 且a[j] =0 那么按a[i]+1,a[i]+2..顺序递增代替问号就好 a[i]0的话,就从0的两边交替选数字就好,取出0两边交替的数字的最小值$ \frac{(i j 1)}{2}$,
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 KMP算法可以把"i前缀"pre[i] 分成ssssst的形式 这里t是s的前缀。 然后s其实就是pre[i]中的前 i+1 f[i]个字符组成的 字符串。 特殊的,t可能就是一个空串。 比如abcdefg 这里f是kmp算法中
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 感觉很像一道最短路。 然后就试了一发。 结果真的是。。 只要用一个优先队列优化的dijkstra算法求出每个点的最短路上的前一个点是什么就可以了。 相同大小的话.取每个边的前一个边的边权较小的那个。 然后把每个点的前缀边输出就好
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 显然l..r这一段连续的1可以把l..r+1变成有序的。 那么就把所有的连续1段变成有序的就好。 看看最后是不是升序即可。 【代码】 cpp include using namespace std; const int N =
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 所给的li,ri是左括号从左到右的顺序给的。 (且注意长度是2 n 现在我们先把第一个左括号放在第1个位置。 然后考虑第二个位置。 如果这个位置能放右括号和第一个匹配(位置满足在1+l[i]..1+r[i]之间. 那么我们就在第
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 一开始所有的数字单独成一个集合。 然后用v[0]和v[1]记录 集合的和 为 偶数 和 奇数 的集合 它们的根节点 (并查集 然后先让v[0]的大小变成p //奇数+偶数是奇数 //奇数+奇数是偶数 //偶数+偶数是偶数 如果v
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 紫书上的原题; "链接" 【代码】 cpp include define ll long long using namespace std; const int N = 1e5; ll m,c1,c2,v1,v2; int ma
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 优先把不是10的倍数的变成10的倍数。 (优先%10比较大的数字增加 如果k还有剩余。 剩下的数字都是10的倍数了。 那么先加哪一个都可以了。 【代码】 cpp include using namespace std; cons
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 假设现在每个人收到的信息条数存在cnt里面 那个人猜的条数为target 则如果cnt[i]==target[i] 则我们就让第i个人来就好了。 因为s[i][i]=1恒成立。 所以第i个人它的cnt个数肯定递增了。 因此第i个
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 用cnt[i]记录数字i出现的次数就好。 然后i从1e6逆序到1 如果cnt[i+1]和cnt[i] 0同时成立的话。 那么得到一条边。加入到vector中。 然后 如果cnt[i] 1 则cnt[i] =2 加入i到vecto
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 排序,逆序。贪心选较大的就好。 【代码】 cpp include define ll long long using namespace std; const int M =1e5; int f[M+10],a[1000+10]
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 肯定是放在m 1或者m+1的。 (m 1是左边的点都离a最近,而m+1则是右边的点都离他最近。 看看哪个更好就行 【代码】 cpp include define ll long long using namespace std;
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 先搞一条a到b的路径 a c x3 x4 x5....xn 2 d b 然后第二个人的路径可以这样 c a x3 x4 x5...xn 2 b d 也即加两条边[a,x3] [xn 2,b] 所以最少只需要n+1条边。 (尽量让
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 根据题意:先明确以下规则: 1.如果两个点之间没有边,那么这两个点只能是a或c,且不能相同 2.如果两个点之间有边,那么他们之间的差的绝对值 【代码】 cpp include using namespace std; const
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 枚举第一种方法。 剩下的全都个第二种方法。 看看能组成多少个队伍就可以了。 【代码】 cpp include define ll long long using namespace std; int n,m; int main(
阅读全文

浙公网安备 33010602011771号