还是以刷水题为主,主要为了保持手感,挑选了几道比较有代表性的易错题和模板题
第一道是14年上海邀请赛的E,二分图匹配的模板题,关键在于能想到每一个“海洋”的坐标分别对应于横向的一个块和纵向的一个块,又每一个块中最多只能用一个海洋,因此符合匹配的条件,在用匈牙利算法之后得到的最大匹配数就是由左边的横向块和右边的纵向块所确定的海洋的坐标,也就是战舰的最大放置个数。
链接如下:http://acm.hdu.edu.cn/showproblem.php?pid=5093
第二道:2014西安邀请赛C题,看起来很暴力的一道题,本质上就是一通乱搞然后迪杰斯特拉一下。。。坑点在于不要忘记第0类(虽然没有第0座城市)
链接如下:http://acm.hdu.edu.cn/showproblem.php?pid=4849
第三道:codeforces 32C:远古的CF,其实就是一道数学题,两维的情况只需要把一维的情况分别算出来然后相乘即可,也就是一个长度为n的一维方格,求使得每次相隔s跳跃的可到达点数最大的起点个数(不可跳出范围),坑点在于要用LL以及各种整除的情况
链接如下:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=25194
第四道:codeforces 31B:字符串问题,本人对字符串的处理向来不太擅长。。。题目大意是求一个给定的字符串是否能恰好分割成若干个邮件形式的字符串,如果能的话给出一种分割的方法。这道题我用了一个一个字符读入的方法,然后慢慢判断,简直麻烦。后来想想也许整体读入再找到@的位置把所有的分割点找到也许会更方便
链接如下:http://codeforces.com/problemset/problem/31/B
第五道:codeforces 28B:题目大意是有n个细胞,每个细胞有一个编号,这些编号分别是1到n的一个排列,每个细胞还有一个喜欢的数,代表他们可以和相距为喜欢的数的细胞交换编号,问是否能经过若干次交换使得这些细胞的编号变成1,2,...,n。将两个细胞可交换编号看成两个细胞是连通的,最后只需要判断每个细胞是否与第【该细胞上的编号】个细胞连通即可,可用最短路的若干算法,因为数据量不大,因此floyd是比较好的一个选择。
链接如下:http://codeforces.com/problemset/problem/28/B
接下来是代码时间:
第一题:
第二题:(BY汇汇)
第三题:
第四题:
第五题: