随笔分类 - 紫书第8章
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 会发现,如果把连续4个数字进行一次翻转的话。 假设这连续的4个数字的逆序数为x; 那么翻转过后,逆序数就会变成6 x; (最多6个逆序数,现在翻转了 那么这4个逆序数的变化为6 2x 显然变化值为一个偶数。 而1..l 1和r+
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 贪心。 把所有的区间按照右端点为第一关键字,左端点为第二关键字升序排。 然后令now = a[i].second. (now即当前的连续区间的最右端点 即第一个区间的右端点。 第一个点就应该放在这个地方。 然后对于第i+1个区间
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 二分长度。 显然长度越长。就越不可能。 二分的时候。可以不用管精度。 直接指定一个二分次数的上限就好。 判断长度是否可行。直接用贪心就好。 贪心(排序区间,尽量让新的区间右端点靠左一点。以便后面的区间有放的地方。 最后得到小数。
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 枚举1的位置在i 往右摆成一排。 a[i+1]..a[n]..a[1]..a[i 1]变为有序的 寻找循环节,每个循环节的长度 1是必要的步骤数 获取必要的步骤数,取最小值。 O(n^2) 往左排成一排 同样的方法处理就好 【代
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 结束时间比较早的,就早点开始做。 所以,将n件事情,按照结束时间升序排。 然后对于第i件事情。 尽量把它往左排。 即t+1..t+a[i].q 然后如果发现t+a[i].q 【代码】 cpp include using name
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 每个村庄都有一个范围[li..ri] 只要在这个范围内放点都可以“支配”这个村庄。 则问题就等价于线段上有n个区间。 让你选择最少的点。 使得每个区间内都有一个点。 将所有的区间按右端点升序排。其次左端点升序。 然后对于第一个区
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 证明:前i个数一定能凑够1..sum[i]中的所有数字 i=1时显然成立。 现在假设i =2时结论成立 即前i个数字能凑出1..sum[i] 令k=i+1; 现在证明前i+1个数字能凑出1..sum[i+1] 即用前i个数字和数
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 感觉最大度数|1就是最多需要的个数了。 就贪心一下。 然后模拟染色的过程就可以了。 (贪心染色就可以了 (看看周围哪个颜色没有,就用它) k在dfs之前忘记判断是不是奇数了。。。。 以及忘记清空g 【代码】 cpp includ
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 double千万不要用==判断相等。。。 而且两个保留2位有效数字的数字x,y 判断它们相等应该这样。 int temp1 = round(x 100.0),temp2 = round(y 100.0); temp1==temp
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 让你把排列1..n变换成对应的输入序列。 每次可以交换前两个数字,或者把第一个数字放到末尾去。 可以逆向考虑。 即把无序的序列变换成有序的. 则第二种操作就变为"把末尾的数字放到最前面去" 则可以这样。 如果a[0] a[1]
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 想把数字i从位置j移动到位置i 可以这样。 假设mov(x,y)表示将(x..x+len/2 1)和(x+len/2..y)交换。 则可以先进行mov(j,i 1)操作。 (如果(j,i 1)的长度为奇数,终点就变为i 2) 令
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 考虑删掉第i位。 则第i+1位就会取代第i位。 则肯定第i+1位比第i位大的话,才比较好。 则从小到大贪心删,找到第一个a[i+1] a[i]的i. 然后每次删掉这样的i就可以了。 【代码】 cpp / 1.Shoud it u
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 如果1的个数第一个串比第2个串多。 那么就无解。 否则。 找几个位置去凑1 优先找'?'然后才是0的位置 剩余的全都用swap操作就好 【代码】 cpp / 1.Shoud it use long long ? 2.Have y
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 字符串排序后 显然是n/2 1和n/2这两个字符串进行比较。 设为a,b 找到第一个不相同的位置。 即0..i 1是相同的前缀,然后第i位不一样了。 则如果i是a的最后一位了。 那么直接输出a就好。 这样满足大于等于a且小于b
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 每个背包只能装两个东西。 而且每个东西都要被装进去。 那么我们随意考虑某个物品。(不必要求顺序 这个物品肯定要放进某个背包里面的。 那么背包数递增。 那么剩余的空间。 只能装一个了。 要装谁呢? 肯定是尽可能装较大的.所以用up
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 枚举第一段的范围[0..i] (0 【代码】 cpp / 1.Shoud it use long long ? 2.Have you ever test several sample(at least therr) yourse
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 尺取法。 假设现在取[l..r]这一段。 然后发现累加的和小于0了。 那么方法只能是不走l..l+1这一段了 即delta递减(p[l] q[l]); 直到delta =0为止。 某个时刻如果发现r+1==l 或者l==1且r=
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 规律+递归题 f[k][i] k时刻前i行的红气球个数 i2^(k 1) f[k][i] = 2 c[k 1] + f[k 1][i 2^(k 1)]; c[k]表示k时刻红气球个数 显然k时刻有3^k个红气球 【代码】 cpp
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 就是合并果子。。 每次都合并最小的就可以啦。 别忘了初始化 【代码】 cpp / 1.Shoud it use long long ? 2.Have you ever test several sample(at least t
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 二分最后的最大值的最小值。 得到ans 然后从后往前尽量划分。 如果发现不够分成k个。 那么就从第一个开始接着分restk个(每隔1个分1块 中间遇到之前分了的就直接跳过 【代码】 cpp / 1.Shoud it use lo
阅读全文