随笔分类 - 曾经的ACM竞赛
摘要:话说这题比赛时候过的好少,连题都没读TOT 先考虑dp求01串的不同子序列的个数。 dp[i][j]表示用前i个字符组成的以j为结尾的01串个数。 如果第i个字符为0,则dp[i][0] = dp[i-1][1] + dp[i-1][0] + 1,dp[i][1] = dp[i-1][1] 如果第i
阅读全文
摘要:三年半的ACM生涯终于迎来了终点,退役之时,感慨万分,故写此文以纪念逝去的时光,那些为ACM拼搏的日子,那段弱校ACM的奋斗史。 三年半的ACM生涯,窝见证了CUMT从打铁到铜牌的突破,又见证了从铜牌到银牌的突破;见证了集训队员从3人发展到10余人,又见证了ACM实验室的落实。 三年半的ACM生涯,
阅读全文
摘要:考虑每个数在最大值内的倍数都求出来大概只有max(ai)ln(max(ai))个。 先排个序,然后对于每个数ai,考虑哪些数字可以变成ai*k。 显然就是区间[ai*k,ai*(k+1))内的数,这个二分一下就好了。
阅读全文
摘要:dp[i][0]表示从i出发,轮到先手走的最优值。 dp[i][1]表示从i出发,轮到后手走的最优值。 dp[i][0]=max(dp[j][1]+sum[j]) dp[i][1]=min(dp[j][0]-sum[j]) 倒着推就好了。
阅读全文
摘要:考虑将两个单词变成有序,我们可以得到一个或者两个旋转次数的区间。 然后考虑将两组单词变成有序,比如[l,mid]和[mid+1,r],对于mid和mid+1这两个单词我们可以求出使他们有序的旋转次数的区间。 然后将这个区间与[l,mid]的区间以及[mid+1,r]的区间求交,就可以得到使[l,r]
阅读全文
摘要:求出无向图的所有边双联通分量,然后缩点就成了一颗树。 然后我们选取最大的那个边双联通分量作为根,这样我们就可以确定所有割边的方向了。 对于边双联通分量里面的边,我们随便dfs一下就可以把它变成强连通分量,方向也就确定了。
阅读全文
摘要:首先检测有木有和Computer匹配的Socket,如果有则将其匹配。 然后将所有没有匹配的Socket连上Adapter,再去检测有木有Computer与Socket匹配。 重复这个操作31次,所有Socket的power都变成1了,如果再不能匹配就结束程序。
阅读全文
摘要:显然要二分答案,然后对于一个天数,我们来判断是否可以通过所有考试,这里就贪心来安排就好了。 首先我们希望每门课的考试时间越晚越好,然后就是先复习最早开始的考试。
阅读全文
摘要:由于本人愚笨,最后一题实在无力AC,于是只有前14题的题解Orz 总的来说,这次模拟赛的题目不算难,前14题基本上一眼就有思路,但是某些题写起来确实不太容易,编码复杂度有点高~ L1-1 N个数求和 设计一个分数类,重载加法运算符,注意要约分,用欧几里得算法求个最大公约数即可。 L1-2 比较大小
阅读全文
摘要:思路:先把路径按反斜杠split成数组,然后用一个ArrayList去模拟。如果遇到空或者.则不处理;如果遇到..则删除ArrayList最后一个元素(注意如果只有1个元素则不删除);其他情况直接加到ArrayList里面。注意特判输入空串的情况。
阅读全文
摘要:思路:创建两个bool数组来模拟下落过程,一个存放面板状态,一个存放下落的格子。检测格子和面板对应位置是否同时为True,如果是则有冲突,不能继续下落,否则增加行号。为了统一处理,我们把面板最下面加一行True。
阅读全文
摘要:思路:枚举每个点,看看它是否同时小于/大于前一个点和后一个点
阅读全文
摘要:题目链接 思路:这是一道动态规划的题目,估计好多人去用贪心算法了,反正比赛时我想的贪心策略很容易找到反例Orz。题目就相当于选取一些区间去覆盖[0,T],每个区间有个价格,要求总价格最小。容易想到,如果覆盖[0,T]区间的价格是最小的,那么覆盖[0,T']的价格也必须是最小的,说明这个问题具有最优子
阅读全文
摘要:题目链接 思路:每条边对总度的贡献都是2,所以如果形成了一棵树,那么边一定是n-1条,总度就是2(n-1)。先把所有顶点的度加起来,判断是否等于2(n-1),如果不等,那一定就是Impossible了。但是相等就能断定能形成一棵树吗?来看看下面这个图 存在一个度为0的顶点,肯定就不能形成树咯。所以判
阅读全文
摘要:题目链接 思路:由于每次只生产2、4、8个零件,有一个没有编号,那么那个编号一定出现了奇数次。可以先排个序,再统计每个编号出现的次数。当然还有更简单的方法,利用异或运算的性质,如果异或某个数字偶数次则相当于没有异或这个数,所以把所有编号异或起来的结果就是那个奇数次的编号。 AC代码:
阅读全文
摘要:题目链接 思路:这是一道非常简单的题目,直接用公式计算就好了。对于IP地址a.b.c.d,转换为十进制数就是(a<<24)|(b<<16)|(c<<8)|d。唯一要注意的就是这里需要用unsigned int来存数值。 AC代码:
阅读全文

浙公网安备 33010602011771号