UVALive 5052 Genome Evolution ——(xjbg)
摘要:本以为这题n=3000,随便n方一下就能过。于是我先枚举长度len再枚举起点,不断增加新的点并删除原来的点,判断在b中的r-l+1是不是等于len即可,这个过程显然要用set维护比较方便,但是貌似卡了这个log,T了= =。 然后修改了一下思路,先枚举左端点,再不断的向有扩张,并用两个变量l和r来标
阅读全文
UVALive 4254 Processor ——(二分+优先队列处理)
摘要:题目是求最小化最大值,很显然是二分,但是二分以后怎么判断mid是否可行并不容易。 代码参考了网上一个博客的代码。巧妙之处在于一秒一秒的考虑,这样可以把处理速度mid直接转化成1秒内实际的量来解决(避免小数问题),然后贪心考虑每次处理最早结束的工作即可。注意我这里的代码t表示的是一整秒,譬如[1,2]
阅读全文
2015 Syrian Private Universities Collegiate Programming Contest
摘要:题目链接:https://vjudge.net/contest/152219#overview。 水题较多。就贴一下当时没做出来的几题好了。 D,方法很简单,当时没想出来。用pos[x]表示x这个数已经是递增序列的第几个了,那么每次输入一个数x,令pos[x] = pos[x-1] + 1并更新答案
阅读全文
Codeforces Round #402 (Div. 2)
摘要:现场打的,出3题,被rejudge掉B题= =。 A题,水题,两边数量不一样的总和除以4即可。 B题,写挫了,结果少了一个特判。 C题,水题。直接贪心即可。 D题,比赛时没做出来= =。判断b串是a串的子序列是线性的,那么二分答案即可。
阅读全文
BestCoder Round #92
摘要:现场赛就出了一题= =。 A题,水题。但是几天没写代码有点手生,调试了一会才A= =。 B题,考虑到只要连续的四个即可,那么枚举中间的两个即可。代码如下: 1 #include <stdio.h> 2 #include <algorithm> 3 #include <string.h> 4 #inc
阅读全文
Codeforces Round #366 (Div. 2)
摘要:A题,水题。 B题,博弈论题,找到的规律是当前数是奇数那么这个子游戏是必败的,否则必胜。那么异或一下即可。 C题,模拟题,考虑到第三个操作如果之前清空到第x条,且当前清空到第t条,如果t比x要小,那么可以忽略清空到t条的操作;另外所有元素最多入队列和出队列一次。那么总的复杂度是O(n)的。代码如下:
阅读全文
Codeforces Round #394 (Div. 2)
摘要:A题,水题,但是需要特判"0 0"因为至少至少走了一格= =。 B题,水题,但是补题的时候n=1的情况没考虑(或者说写挫了)导致WA了一发。 C题,数据小,可以直接暴力,用3个数组分别储存每一行变成3种类型的字符需要移动的最少位置。然后三个for来暴力枚举分别由这3行提供3种字符,更新答案即可。代码
阅读全文
Codeforces Round #382 (Div. 2)
摘要:A题,水题。 B题,贪心一发。排序一下,从大到小,先拿个数较少的几个,再拿个数较多的几个即可。证明应该是显而易见的。 C题,本以为log一发即可。但是log的话不能保证深度最深,即不能保证最大分数最大。因此考虑递推,用f[i]表示要得到i分需要的最少的人数,显然要人数最少,最后剩下一个即可。那么要得
阅读全文
Codeforces Round #392 (Div. 2)
摘要:突然觉得CF的题很锻炼代码能力和反应速度。。更加坚定了我在寒假要多打CF的决心。 AB都是大水题,直接跳过了。 C题,很简单的题目,不过感觉细节必须考虑清楚。WA了很多发才过,而且最终代码还很挫。。还特判了n是1和2的情况= =。。代码太挫了就不贴了。 D题,也是比较简单的贪心,不过感觉直接写for
阅读全文
UVA 11853 Paintball ——(dfs+圆交判定)
摘要:题意:给出一个1000*1000大小的矩阵,里面有若干圆,表示障碍物,现在要找出从左边到右边的一条通路,输出入口和出口的坐标,如果有多答案,输出y值最大的答案。 分析:从与上面相连的圆开始dfs,每次找与之相交的圆作为dfs的路径,如果能访问到下面,那么左边和右边肯定是不连通的;否则,连通。并且在d
阅读全文
CodeForces Good Bye 2016
摘要:A题,水题略过。 B题,也水,但是想复杂了。只要运动超出[0,20000]的范围就算不可能了。 C题,我自己的方法是解不等式,然后取最大的答案即可。代码如下: 1 #include <stdio.h> 2 #include <algorithm> 3 #include <string.h> 4 #i
阅读全文
zstuoj 4243 牛吃草 ——(二分+两圆交)
摘要:这题上次补了以后忘记写博客了,现在补一下。 有两个注意点,第一是两圆相交的模板。可以通过任意一种情况手推出来。 第二是,实数二分要注意不用ans记录为妙,因为可能因为eps过小,导致ans无法进入记录答案的语句中(ans过大可能又会有误差),直接用一个l或者r记录一下即可。 代码如下:
阅读全文
codeforces 742D Arpa's weak amphitheater and Mehrdad's valuable Hoses ——(01背包变形)
摘要:题意:给你若干个集合,每个集合内的物品要么选任意一个,要么所有都选,求最后在背包能容纳的范围下最大的价值。 分析:对于每个并查集,从上到下滚动维护即可,其实就是一个01背包= =。 代码如下:
阅读全文
HDU 5410 CRB and His Birthday ——(完全背包变形)
摘要:对于每个物品,如果购买,价值为A[i]*x+B[i]的背包问题。 先写了一发是WA的= =。代码如下: 正解是,先跑一遍价值为A[i]+B[i]的01背包,再跑一遍价值为A[i]完全背包。所以上面的代码错了大概是因为,这两个背包的第二个for的方向是不同的,没办法一起跑吧(除非用另外一组变量记录下到
阅读全文
CodeForces 675C Money Transfers(贪心+奥义维护)
摘要:题意:n个银行。 其中存款有+有-。 总和为0。 n个银行两两相邻((1,n),(1,2)...(n-1,n)); 问最少移动几次(只能相邻移动)能把所有数变为0。 分析:思路很简单,起始答案算它为n,然后每存在一段,这段的和为0(包括就一个0的情况),这个答案就减1。如1 2 3 -6,只有一段,
阅读全文
CodeForces 722D Generating Sets
摘要:题意:如果你有一个原数列的话你可以对任何一个数字进行操作,令这个数字乘2或者乘2后在加1。现在给你一个目标数列,让你求一个原数列,这个原数列是所有可能的原数列当中最大的一个元素最小的那种。注意原数列和目标数列都必须满足set内元素的性质(即每个元素都不相同),但是在变化的过程中不需要满足这个条件。
阅读全文
CodeForces 721D Maxim and Array
摘要:题意:给出n个数,k次机会,每次机会可以使得任意一个数字减少或者加上x,问使得最后的乘积最小的n个数,每个数是多少。 分析:贪心思路是每次取出绝对值最小的一个数,判断乘积的符号以及这个数的符号来做出加或者减的操作。 具体见代码: 顺便回顾一下,优先队列是默认的每次弹出优先级最大的元素(默认less)
阅读全文
CodeForces 535C Tavas and Karafs —— 二分
摘要:题意:给出一个无限长度的等差数列(递增),每次可以让从l开始的m个减少1,如果某个位置已经是0了,那么可以顺延到下一位减少1,这样的操作最多t次,问t次操作以后从l开始的最长0序列的最大右边界r是多少。 分析:由题意可以挖掘出两个条件:l~r中最大的值(因为是递增的,即r的值)必定不大于t;同时,t
阅读全文