随笔分类 -  ACM/ICPC

摘要:因为没有提前买机票,不得不做30多个小时的慢车去金华。周四晚上出发的时候打车去火车站我竟然晕车,长春也遇到坐出租车也晕的情况,我也没怎么在意。没想到上了火车之后竟然也晕车,到了第二天基本上严重到没法说话了,记得在火车上泡了一个泡面都实在没有力气吃。因为火车晚点,本来34个小时的火车我们坐了38个小时才到,下车的时候已经虚得不行,当时我还背了电脑,唯一的感觉就是有可能随时晕倒。不过还好宾馆离火车站比较近,走了不远就到。金华气温差不多有30度,我那天还穿了3个衣服,跟去年北京一样。进了宾馆竟然发现有电脑,这是我第一次出去比赛自带电脑也是第一次住的地方提供电脑,所以到了金华之后我电脑都没开过... 阅读全文
posted @ 2012-10-30 21:24 like@neu 阅读(297) 评论(5) 推荐(0)
摘要:DP:http://acm.uestc.edu.cn/contest.php?cid=167数学:http://acm.uestc.edu.cn/contest.php?cid=170图论:http://acm.uestc.edu.cn/contest.php?cid=166搜索:http://acm.uestc.edu.cn/contest.php?cid=164 阅读全文
posted @ 2012-10-16 20:41 like@neu 阅读(189) 评论(2) 推荐(0)
摘要:好久没有来博客园=。=好久没正经做题=。=最近在准备考研,不过直觉是要酱油了。第一题,目测是水题,写了好久过不去样例……div1第一题每次都是一个感觉,看似很简单,就是过不去。写的快的240+,写的慢的130……后面没办法了直接枚举开始走了多少步,反正是乱搞过的。第二题,没过=。=写完第一题用了35分钟,然后看第二题。基本没什么想法,想到图论。于是想了一个做法,先写一个floyd预处理,然后用最大团模板。ps:我是当然手写不出最大团的……花了不到10分钟写完过了样例就交了。然后到了12点就马上睡了。感觉是过不去,但是不知道哪儿不对。第二题从来没过去过,虽然有时候能想到正确的做法,但是几乎都是n 阅读全文
posted @ 2012-10-12 11:16 like@neu 阅读(419) 评论(0) 推荐(0)
摘要:等了好久的一场cf,继续混div2.tc更是惨不忍睹。太弱了。线段树就会点简单的,后缀数组实在看不懂了。就这样吧。 阅读全文
posted @ 2011-11-25 16:12 like@neu 阅读(180) 评论(0) 推荐(0)
摘要:题目来源:usaco training 这是一个模拟题。题目较长,不太容易理解意思,尤其对于本人这种四级还没过的菜b。给你5个轮子,每个轮子有一个转动的速度,和不多于5个空隙。每个空隙给出一个起始角度和空隙的大小(用一个角度表示,这里我是拿google翻译extent了这个词才明白的,不然样例都没看懂)。如果明白了题目意思就能简单不少了。因为不管轮子转动的速度是多少,最多转动360s以后肯定也会回到原点了(v*360%360==0)。所以枚举转动时间即可。View Code 1 /* 2 ID: like_091 3 PROG: spin 4 LANG: C++ 5 */ 6 #include 阅读全文
posted @ 2011-08-20 13:14 like@neu 阅读(381) 评论(0) 推荐(0)
摘要:题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1002 写的比较疼的一个题。做法是trie+dp,dp很裸,不是难点。主要是对于trie不太会的同学写起来比较费劲。算是trie的入门题吧。解法之一就是先把主串转换成字符串,在把字典按照对应的数字转换,插入到trie中。然后对主串每个位置枚举,如果从i+1开始长j的字串存在于字典中,则d[i+j]=min(d[i+j],d[i]+1),剩下来就很好写了。 有一个需要注意的地方就是题目说可能存在多个解求出人一个均可,如果是test3 wa了就注意下这个地方。#include <io 阅读全文
posted @ 2011-08-19 18:55 like@neu 阅读(313) 评论(0) 推荐(0)
摘要:两个题目看起来没什么区别,都是嵌套,唯一的不同就是一个要求l <= l' and w <= w'. 而另一个则要求w1 < w2 and h1 < h2.多了一个等于号。1065在很久以前就被我水过了。搜了一下解题报告都是有关偏序集的。抑或是跟最长上升子序列有关。其实以我自己的想法完全可以模拟accepted掉,当然代价就是时间效率可能没有那么好。最坏情况下是n^2级,在3636大概是花了800ms过了。 首先是1065,想法很简单,就是先二级排序,如果l相等就对w排序,都是升序排列。然后设置一个标记访问变量。从第一个开始遍历,如果这个位置还没有访问,就 阅读全文
posted @ 2011-08-06 20:39 like@neu 阅读(302) 评论(2) 推荐(0)
摘要:动态规划中的01背包问题。 题意是给两个数组分别表示每只牛的幽默感和智商,求全体牛的一个子集使得子集中所有牛的幽默感和智商和的总和最大,条件是幽默感总和和智商总和不能为负数。如果把幽默感当成重量,智力值当成价值(或者相反)就变成了普通的01背包问题了。但是有一个问题就是值可能出现小于0的情况— —,肿么办?凉拌……可以像本体的主流做法一样开二倍数组把原点移到100000,或者也可以每次计算都把a[i]加上1000,然后单独开一个数组,记录子集的大小,即多用的1000的个数。 采用第二种方法,则如果01背包中的状态转移方程为f[i] = max(f[i], f[i - w[j]] + v[j]. 阅读全文
posted @ 2011-08-05 17:39 like@neu 阅读(356) 评论(0) 推荐(0)
摘要:纯暴力是n^4果断超时。本题得解法可以采用二分搜索。时间复杂度n^2(logn)的样子,空间复杂度n^2。虽然还是非常巨大,但是本题可以险过,时间大概5s。 采用两个数组a[],b[]分别记录前两列所有可能的和与后两列所有可能的和,N^2级。然后对两个数组排序,便于统计每个值出现的次数,每个数组变为了两个数组,一个保存所有可能的值,只保存一个,仍为a[],另设一个数组c[],c[i]==(a[i]的个数)。b,d类似。然后对a中每一个数a[i]在b内二分搜索a[i]*(-1),如果存在b[j] == a[i]*(-1),返回d[j],没有就返回0。如果返回值不为0则总数加上d[j]*c[i]. 阅读全文
posted @ 2011-08-03 20:42 like@neu 阅读(168) 评论(0) 推荐(0)
摘要:原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272这是一个并查集题,看似很水,其实陷阱也有很多,尤其是有了垃圾数据0 0,- -注意几个地方:(1)0 0输出Yes;(2),可能不是连通图,所以要判断是否连通,不连通No;(3),可能不是每个点都出现,比如最大点4,只出现了1 2 4,所以要注意标记。#include <stdio.h>#include <string.h>#include <algorithm>#include <string>#include <iostream> 阅读全文
posted @ 2011-06-26 10:46 like@neu 阅读(270) 评论(0) 推荐(0)
摘要:原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2059 典型的动态规划,这个题没有想太复杂,直接用最简单的dp过了,分类说是数塔变种,但是没有找到思路。所以还是朴素的dp过了,wa了三次,后面还是ac了。hdu的数据确实没有poj的强。说下我的思路,代码写的很挫,肯定没人能看懂。分为两种情况,1、一次油也不加。2、至少加一次油,设d[i][j]为到第i个加油站加了j次油的最快时间。1<=i<=n, 1<=j<=i;代码如下,可供对拍:#include <iostream>#include <cstdio& 阅读全文
posted @ 2011-06-09 18:46 like@neu 阅读(182) 评论(0) 推荐(0)
摘要:原题链接:http://poj.org/problem?id=2287 田忌赛马的解法之一是贪心算法的变形,如果是朴素的贪心可能会出错,因为不满足直接贪心的条件。 提供一种解法如下: (1)、对两个数组排序。 (2)、对田忌的马所在数组从小到大遍历,对每一匹马来说,可以找一个尽量大的对手并且击败对手。因此对王得马从大到小遍历,如果遇到比田忌的马速度慢的,则田忌赢一场,将双方的这两匹马标记为已访问。设赢t场。 (3)、对田忌的马再次遍历,对每一匹马遍历王得马的数组,寻找一匹没有使用的马使他们的速度相等。如果找到,双方的马标记为已访问。 (4)、对田忌或王的马遍历,设还没有访问的马的个数为k。 . 阅读全文
posted @ 2011-05-25 21:44 like@neu 阅读(381) 评论(0) 推荐(0)
摘要:我对博客园已经非常失望了。代码也不能和文字分开了。不知道是出了什么毛病。挺讨厌乱七八糟! 这个题是典型的dp,由低往上递推。公式很简单。需要注意一个地方就是负负得正。不仅需要保存一段区间的最大值,也需要保存最小值。关于这一点我也是看了discuss后才明白的。至于为什么要这样,想想也能想明白。就不多说了。代码共参考:#include<iostream>#include<fstream>#include<algorithm>using namespace std;const int MAX = 50 + 10;const int INF = 3000000;i 阅读全文
posted @ 2011-02-26 20:59 like@neu 阅读(273) 评论(0) 推荐(0)
摘要:TOJ第二题:http://acm.tju.edu.cn/toj/showp3821.html 两天没有写东西了,这两天比较纠结,发现什么都忘了。难道寒假就是个悲剧? 这个题是一个简单题。给一个字符串,求排列是素数的个数。不说了,贴代码:#include<iostream>#include<algorithm>#include<cmath>#include<string>using namespace std;const int MAX_SIZE = 10000000;int num[MAX_SIZE + 1];int value[5000];v 阅读全文
posted @ 2011-02-23 22:35 like@neu 阅读(298) 评论(0) 推荐(0)
摘要:原题链接:http://acm.tju.edu.cn/toj/showp3817.html  第一次上toj做题,今天开始感觉这个题想仔细点应该是不难的。但是写好了以后上去直接攒了七八个wa,怎么想也想不出哪儿错了。直接搜解题报告也没有。因为是今天新出的题吧。晚上几乎使上了各种手段包括各种外援后终于知道哪儿错了。费劲九牛二虎之力改完后ac,真的是折磨人啊。这种BT模拟题是最要命的。  下面讲一下这个题的解法,给一些棍子,摆出最大数和最小数。很容易想到最大就是位数尽量多的情况下,每位的数值尽量大。最小就是相反。求最大数很好求,因为只要摆尽量多的1,如果不是偶数,就摆一个7,再加余下的1。把最小数 阅读全文
posted @ 2011-02-20 22:45 like@neu 阅读(344) 评论(0) 推荐(1)
摘要:原题:http://poj.org/problem?id=3157  模拟题,需要注意一下地方,我看了discuss才过的,很多地方没想过。其实题目说的也不是很清楚吧。输入输出还弄的乱七八糟的。没有牵涉到什么算法好像也没什么好讲的。注意几个地方:  (1)java没有下划线,c++没有大写字母。  (2)字符串第一个字母都是小写的,大写就Error。  (3)下划线不能出现在末尾,也不能连续出现。  主要就是参考gfedcba的提示。简单帖下代码。 阅读全文
posted @ 2011-02-16 23:37 like@neu 阅读(271) 评论(0) 推荐(0)
摘要:原题的链接:http://poj.org/problem?id=2872  咋一看感觉不难,但是还是贡献了四个TLE,比较悲剧。本人水平极有限,只能给还没有ac的同学一点建议。  关于本题,没有给出数据的规模,所以肯定不小,但是开始我没有想到会那么大。解题的关键就是查找这个地方该如何做,我先试了一下,用vector,果断超时,set也试了一下,发现没有过,后面才发现代码也有问题,囧。过了以后再用set试了一下,TLE,可能是管理员把数据加强了,因为看到有用set过的,或者我代码还有问题。在用set试的时候再贡献了3个ce,就当攒RP吧。个人觉得set应该够快才对,因为set内部就是红黑树,速度 阅读全文
posted @ 2011-02-16 20:17 like@neu 阅读(249) 评论(0) 推荐(0)
摘要:原题链接:http://poj.org/problem?id=2424  看到提交的人并不多,通过率也挺低的,无聊至极就把解题报告写一下。本题其实是个十足的水题,千万不要看到一些分类里面说是dp就被吓到。仔细看明白题意思路也就出来了。如果说和dp有点关系的话,那也是就是动态处理这一块,这种题应该就属于送分型的题。摸清题意很重要。  题目意思就是说餐厅里面有2座、4座和6座的桌子若干。客人按人数选择餐桌,如果需要等半个小时以上,就不吃了。问一共多少人在餐厅用餐。解题的思路很简单,就是每次来客人以后寻找空座,如果没有,就找最快吃完的人。更新时间。如果有空桌,那么这个桌子空下来需要从现在开始再加30 阅读全文
posted @ 2011-02-15 21:46 like@neu 阅读(483) 评论(0) 推荐(1)
摘要:题目的出处:http://poj.org/problem?id=2159  本来觉得是个水题,也是按水题的思路做的。但是题目的意思比较内涵,说白了就是个陷阱。题目说字符串的加密有两种方法,一种是变换字符,把一个字符变成它的下一个字符,如果是Z,就变成A。还有一种就是给一个数字排列,排列中每个位置的字符就是以这个数字为下标的字符。貌似比较简单。很多人能够想到不管是第一种还是第二种,都可能是多种结果,因为不一定是变成下一个字符,排列就更多了。现在主要需要考虑的就是把两种加密方式结合起来,是否能从原来的字符串得到目的字符串。题目的陷阱就是字符的转换规律也是不确定。不一定是下一个,也不一定是一定的距离 阅读全文
posted @ 2011-02-15 11:28 like@neu 阅读(349) 评论(0) 推荐(0)
摘要:原题链接:http://poj.org/problem?id=1611只要能看懂题目的都明白,就是求谁跟谁是一个集合,还得跟别的集合不相交。  本题是并查积的典型应用。如果采用暴力的解法肯定超时无疑,而且也不知道每行有多少个输入,如果声明个超大数组还有超内存的危险。如果用并查积的解法,这些都可以避免。并查积在算法导论第二十一章有详细介绍,完全可以按照书把模板写出来。首先从1到n-1,把每个数字放到一个单独的集合,集合唯一的元素就是这个数字,设为i,集合的代表也是i。然后从每行输入,没每组数中的元素所在的集合全部合并成一个集合。最后再检查和0在一个集合里面的元素的数目便大功告成了。需要小心得地方 阅读全文
posted @ 2011-02-14 20:20 like@neu 阅读(343) 评论(0) 推荐(0)