摘要: http://ace.delos.com/usacoprob2?a=SFbMUjuLYE9&S=pprime 额。。。用了一种很笨的方法,速度极慢== 首先这里不能先求素数再求回文,时间上肯定过不了。 要先生成回文数,再判断是否为素数。 我的方法:直接枚举回文数的前半部分,然后把数扩展成回文数,判断是否为质数。 主要步骤: 1.筛法求出10000以内的素数,在后面的素数判断中可以加快速... 阅读全文
posted @ 2012-10-11 17:27 ay27 阅读(146) 评论(0) 推荐(0) 编辑
摘要: http://ace.delos.com/usacoprob2?a=khUaw8W1UZV&S=numtri 已经忘记第几次做这水题了。。。。。 发现USACO的first time好像挺容易拿的。。。又一次了。。。 不过,正常来说,我的程序也就是标准写法啊。。。为什么这样都可以first time呢??? #include <iostream>#include <cstdio>us... 阅读全文
posted @ 2012-10-11 15:42 ay27 阅读(104) 评论(0) 推荐(0) 编辑
摘要: http://ace.delos.com/usacoprob2?a=SZbyXoKqpyP&S=milk3 一题比较简单的搜索题。nocow上列出3种解法:http://www.nocow.cn/index.php/USACO/milk3 就我的感觉吧,方法一最简单而且最靠谱,而我的程序长得好像和方法一最像了= = 因为倒法只有6种(a倒b,a倒c,b倒a,b倒c,c倒a,c倒b),而且当且... 阅读全文
posted @ 2012-10-11 14:47 ay27 阅读(274) 评论(0) 推荐(0) 编辑
摘要: http://ace.delos.com/usacoprob2?a=WNyvQo2qbjE&S=ariprog额。。。比较水的题,综合起来有两种做法,一种是先算出所有的双平方数,然后在这个集合中枚举a,b。另一种是直接枚举a,b,然后再逐一判断是否为双平方数,不过这种方法超时的风险很大,要很多剪枝才行。鄙人果断方法一了。方法一如果不加入剪枝,5秒也是够呛的。而最简单有效的剪枝就是当a+b(n-1)>m时,根本不用再做下去了。对了,这里我发现了原来freopen是定义在cstdio头文件中的,一直不知道T_T#include <iostream>#include < 阅读全文
posted @ 2012-10-10 18:39 ay27 阅读(140) 评论(0) 推荐(0) 编辑
摘要: http://ace.delos.com/usacoprob2?a=GOVL6gcgbQL&S=packrec 嗯,一道无比恶心的题。。。。 观察好这几个图形,基本上就要靠这几个图形做题了。这题恶心的地方除了这几个图形,还有就是暴搜的方法,要全排列生成4个矩形的排列,然后才能按照上面几个图形来划分cases。注意了,第四个和第五个图形是一样的,只不过把中间的一列和左边的一列交换了位置。还有... 阅读全文
posted @ 2012-10-06 21:06 ay27 阅读(158) 评论(0) 推荐(1) 编辑
摘要: http://ace.delos.com/usacoprob2?a=tDp1mPxueqJ&S=crypt1 显而易见,两种解法,一种是直接枚举乘数,共有900*90=81000种可能,然后拆数,判断;另一种是枚举乘数的每一位,边枚举边判断,最坏的情况是9^5=59049种可能,基本上没有超时的可能。。。。 我的是枚举乘数的每一位。 a3 a2 a1 (a... 阅读全文
posted @ 2012-10-06 18:59 ay27 阅读(126) 评论(0) 推荐(0) 编辑
摘要: http://ace.delos.com/usacoprob2?a=I1dC0kaErvZ&S=calfflac 求文章的最大回文字串,暴搜就可以了。可以算一下时间复杂度,O()=20000*2000=40000000,四千万而已,绝对不超时,当然前提是不用string,若用string,可能会超时,这个我没有试过了。 主要是枚举回文串的中值,然后用两个指针向中值的两边尽可能扩展,然后记录最大... 阅读全文
posted @ 2012-10-06 18:10 ay27 阅读(169) 评论(0) 推荐(0) 编辑
摘要: http://ace.delos.com/usacoprob2?a=aGfy6bAUEQK&S=milk2这题做法比较多了,不过也离不开排序。是排开始的时间?排结束的时间?我的做法是,两个一起排!转化为类似于括号的配对问题,不过有些细节要注意好了。#include <iostream>#include <string.h>#include <cstdio>#include <algorithm>using namespace std;struct node{ int data; //时间点 bool flag; //标记开始时间和结束时间 阅读全文
posted @ 2012-10-06 09:56 ay27 阅读(114) 评论(0) 推荐(1) 编辑
摘要: http://ace.delos.com/usacoprob2?a=aGfy6bAUEQK&S=barn1额。。。比较水的题,估计没有比我的更短的程序了。。。。先用一块木板把全部牛棚盖上,再删去(n-1)个空位,剩下的就是结果了。删去(n-1)个空位,剩下n块牛棚,刚好符合要求,而删去的空位要最大就行了#include <iostream>#include <cstdio>#include <string.h>#include <algorithm>using namespace std;bool compare(int a,int b) 阅读全文
posted @ 2012-10-06 09:33 ay27 阅读(144) 评论(0) 推荐(1) 编辑
摘要: 来源:http://poj.org/problem?id=1236题目大意:给出一个各个学校之间的单向连通图,任务A:求出要令所有学校都收到软件的最小接收学校数目;任务B:求出至少需要添加多少条边,令无论将软件发布到哪一个学校,每一个学校都可以接收到软件思路:对单向图求强连通分量,缩点,对于缩点后的图:求出入度为0的缩点个数,这是任务A;求出入度为0和出度为0的缩点个数,取较大的数,这是任务B。可能有人问,为什么任务A不是直接求出强连通分量的个数,而是求出入度为0的缩点数呢?因为一个缩点,若入度不为0,则它一定可以从其他缩点得到软件,而不需要发一份给它。对于任务B,则要求添加尽可能少的边,使图 阅读全文
posted @ 2012-08-23 09:15 ay27 阅读(147) 评论(0) 推荐(0) 编辑