![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
USACO
ay27
这个作者很懒,什么都没留下…
展开
-
USACO-Barn Repair
http://ace.delos.com/usacoprob2?a=aGfy6bAUEQK&S=barn1额。。。比较水的题,估计没有比我的更短的程序了。。。。先用一块木板把全部牛棚盖上,再删去(n-1)个空位,剩下的就是结果了。删去(n-1)个空位,剩下n块牛棚,刚好符合要求,而删去的空位要最大就行了#include #include #include string.原创 2013-04-26 19:53:34 · 432 阅读 · 0 评论 -
USACO-Zero Sum
来源:http://ace.delos.com/usacoprob2?a=UGksUWcO9ZG&S=zerosum 简单的DFS,秒杀。 主要是不清楚C++中是否有函数可以直接计算表达式,所以自己写了个简单的计算函数。 搜索时按照空格,加号,减号的顺序,连排序都省了。 /*ID:ay27272PROG:zerosumLANG:C++*/#include原创 2013-04-26 19:54:30 · 358 阅读 · 0 评论 -
USACO-The Tamworth Two
来源:http://ace.delos.com/usacoprob2?a=F5gG3hMiHdO&S=ttwo 这题是简单的模拟题,当然你也可以用数学的方法做,我个人推崇KISS原则。 这题的唯一亮点就是无解的判断,我敲代码也懒得想,因为递归到43000左右就爆栈了,所以我到40000时就掐断,这是我的战果: 现在,给出判断无解的方法: 1.无解则无论牛还是农夫,他们的路线都是有周期原创 2013-04-26 19:54:39 · 378 阅读 · 0 评论 -
USACO-Bessie Come Home
来源:http://ace.delos.com/usacoprob2?a=aazEDPQYeki&S=comehome 图论水题 主要注意下题目的条件就行了。 注意a和A可以同时出现,因为边数最大是10000,所以边必有重复给出的。 其他的没什么特别的,dijkstra模板秒杀 /*ID:ay27272PROG:comehomeLANG:C++*/#incl原创 2013-04-26 19:54:43 · 296 阅读 · 0 评论 -
USACO-Cow Tours
来源:http://ace.delos.com/usacoprob2?a=ecro6SKAJN4&S=cowtour 看到题目的数据范围就知道这题应该用O(n^3)的算法做了,明显图论中Floyd算法就符合要求。 算法: 1.floyd求出任意两点的距离; 2.对于连通块A和连通块B,添加一条边e(u,v),把A和B联通,新的连通块称为C,则: dist[C]=dis原创 2013-04-26 19:54:46 · 460 阅读 · 0 评论 -
USACO-Factorials
来源:http://ace.delos.com/usacoprob2?a=5LTgWx8eTT9&S=fact4 这题有什么好说的呢?不必麻烦的数学证明,不必高精度。 每次阶乘时把最后的0去掉,并且只需保存两三位数就够了,这样就不用担心只保存一位时相乘后只剩下0的情况。 /*ID:ay27272PROG:fact4LANG:C++*/#include原创 2013-04-26 19:55:29 · 396 阅读 · 0 评论 -
USACO-Milking Cows
http://ace.delos.com/usacoprob2?a=aGfy6bAUEQK&S=milk2这题做法比较多了,不过也离不开排序。是排开始的时间?排结束的时间?我的做法是,两个一起排!转化为类似于括号的配对问题,不过有些细节要注意好了。 #include #include string.h>#include #include using namesp原创 2013-04-26 19:53:36 · 323 阅读 · 0 评论 -
USACO-Prime Cryptarithm
http://ace.delos.com/usacoprob2?a=tDp1mPxueqJ&S=crypt1 显而易见,两种解法,一种是直接枚举乘数,共有900*90=81000种可能,然后拆数,判断;另一种是枚举乘数的每一位,边枚举边判断,最坏的情况是9^5=59049种可能,基本上没有超时的可能。。。。 我的是枚举乘数的每一位。 a3 a2 a1 (a原创 2013-04-26 19:53:41 · 356 阅读 · 0 评论 -
USACO-Packing Rectangles
http://ace.delos.com/usacoprob2?a=GOVL6gcgbQL&S=packrec 嗯,一道无比恶心的题。。。。 观察好这几个图形,基本上就要靠这几个图形做题了。这题恶心的地方除了这几个图形,还有就是暴搜的方法,要全排列生成4个矩形的排列,然后才能按照上面几个图形来划分cases。注意了,第四个和第五个图形是一样的,只不过把中间的一列和左边的一列交换了位置。还有原创 2013-04-26 19:53:43 · 376 阅读 · 0 评论 -
USACO-Arithmetic Progressions
http://ace.delos.com/usacoprob2?a=WNyvQo2qbjE&S=ariprog额。。。比较水的题,综合起来有两种做法,一种是先算出所有的双平方数,然后在这个集合中枚举a,b。另一种是直接枚举a,b,然后再逐一判断是否为双平方数,不过这种方法超时的风险很大,要很多剪枝才行。鄙人果断方法一了。方法一如果不加入剪枝,5秒也是够呛的。而最简单有效的剪枝就是当a+b(原创 2013-04-26 19:53:45 · 474 阅读 · 0 评论 -
USACO-Preface Numbering
http://ace.delos.com/usacoprob2?a=tOdxUub2T3T&S=preface 这题最简单的是直接枚举。 当然,你可以用数学的方法分析求解,你甚至可以用打表的方法= = 这题麻烦的地方在于如何把一个数准确的转变成那些字符。 把数字直接拆分,然后统计。比如说: 对于439,把它拆分成400+30+9,就是:CD+XXX+IX 对于498,拆分成400+90原创 2013-04-26 19:54:10 · 367 阅读 · 0 评论 -
USACO-Party Lamps
题目来源:http://ace.delos.com/usacoprob2?a=eORCKYsuBVM&S=lamps 说真的,不怎么喜欢这题,主要是题意描述不好。 想了很久,终于明白,输入的亮着的灯,关着的灯,没有输入的就是未知的,状态可以随意。 这样,题目大意就是: 给出最后状态要满足的条件,然后求出从初始状态转换到最后状态过程中,所有满足要求的状态。 这么说来,就是一个简单原创 2013-04-26 19:54:20 · 394 阅读 · 0 评论 -
USACO-Money Systems
来源:http://ace.delos.com/usacoprob2?a=pazq26JBLUl&S=money简单的背包问题把题目再描述一遍:给出V种货币面值,和需要构造的金额数N,问有多少种构造方法。1.这里涉及货币的种类和金额数两个量,所以状态的表示要有这两个量;2.设F[i][j]表示用前i种货币构造金额为j的构造方法数,则: F[i][j]=F原创 2013-04-26 19:54:32 · 329 阅读 · 0 评论 -
USACO-Controlling Companies
来源:http://ace.delos.com/usacoprob2?a=HMnSiF441c0&S=concom 这题光看数据,很容易判断是O(n^3)的算法,很容易想到Floyed算法。 但是直接用三重循环做,基本上不能AC,可能会对很多个点,但是AC就很困难,至少我WA了6次,主要是第七个和第八个点出错,至于为什么,我也不是很懂。 但是如果把三重循环中的第三重写成递归的形式,就AC了,原创 2013-04-26 19:54:36 · 506 阅读 · 1 评论 -
USACO-Overfencing
来源:http://ace.delos.com/usacoprob2?a=M7C67j8aT97&S=maze1 这题构图是个麻烦。 声明一点:我的构图法不值得借鉴 我把图中的每个点编号,记录每个点与上下左右的连通性,然后用DFS搜索距离。 效率很低,而且构图时特别烦。 但是好处就是DFS很容易写,而且算法也很简单。 当然这题解法很多,DFS能行的BFS一般没问题,当然Dijkstra原创 2013-04-26 19:54:41 · 309 阅读 · 0 评论 -
USACO-Humble Numbers
来源:http://www.nocow.cn/index.php/Translate:USACO/humble 这题看数据规模,只能用O(NlogN)算法了,而且只能逐个数生成。 如何从已经生成的丑数中生成新的丑数,并且严格按照递增规律生成,这是主要解决的问题。 很明显,把已有的丑数乘上一个质数p就得到了新的丑数,这样一个BFS的算法很容易想到,但是判重和判断是否按照严格递增的顺序生成,这个原创 2013-04-26 19:54:55 · 528 阅读 · 0 评论 -
USACO-Shaping Regions
来源:http://www.nocow.cn/index.php/Translate:USACO/rect1 很明显灌水法是行不通的。 什么是灌水法?就是把每一个矩形都标记一遍,最后扫描整个大矩阵,算法的时间复杂度是O(N^2),看数据规模就知道肯定死翘翘了。 这题我选用了漂浮法,也称碰撞法。 漂浮法在nocow上是这样描述的: 漂浮法 以逆序来进行放置,即n to 1。逆序的好处在于原创 2013-04-26 19:54:57 · 403 阅读 · 0 评论 -
USACO-Stamps
来源:http://ace.delos.com/usacoprob2?a=5LTgWx8eTT9&S=stamps 一个简单的DP题。 F[i] = min(F[i], F[i-value[j]]+1) F[i]表示凑出i所需的最少钱的张数,若F[i]>n,自然就不能用n张钱凑出i来了。 最后的结果就是i的最大值了。 /*ID:ay27272PROG:stamp原创 2013-04-26 19:55:27 · 380 阅读 · 0 评论 -
USACO-Healthy Holsteins
http://ace.delos.com/usacoprob2?a=kPNDMRfiMdD&S=holstein 这题开始时看错题了,以为只需输出最少饲料数就行了。提交后发现出问题了,然后一直改,改得不像样了。。。。 这题的数据太小了,直接DFS就行了,就算搜遍整个搜索树,也就2^15吧,因为每种饲料只有用和不用两种情况,刚好对应二进制的0和1。 如果数据大了,估计就是DP了。 这题输出有原创 2013-04-26 19:54:06 · 393 阅读 · 0 评论 -
USACO-The Castle
http://ace.delos.com/usacoprob2?a=B9V6yMSRsQa&S=castle一题简单而综合的题,主要问题是输入数据的存储和处理。我定义的存储方式:struct node{ bool dd[4]; int room; node() { for (int i=0;i4;i++)原创 2013-04-26 19:53:59 · 343 阅读 · 0 评论 -
USACO-Calf Flac
http://ace.delos.com/usacoprob2?a=I1dC0kaErvZ&S=calfflac 求文章的最大回文字串,暴搜就可以了。可以算一下时间复杂度,O()=20000*2000=40000000,四千万而已,绝对不超时,当然前提是不用string,若用string,可能会超时,这个我没有试过了。 主要是枚举回文串的中值,然后用两个指针向中值的两边尽可能扩展,然后记录最大原创 2013-04-26 19:53:38 · 381 阅读 · 0 评论 -
USACO-Mother's Milk
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),而且当且原创 2013-04-26 19:53:48 · 401 阅读 · 0 评论 -
USACO-Number Triangles
http://ace.delos.com/usacoprob2?a=khUaw8W1UZV&S=numtri 已经忘记第几次做这水题了。。。。。 发现USACO的first time好像挺容易拿的。。。又一次了。。。 不过,正常来说,我的程序也就是标准写法啊。。。为什么这样都可以first time呢??? #include #include using namespace原创 2013-04-26 19:53:50 · 424 阅读 · 0 评论 -
USACO-Superprime Rib
http://ace.delos.com/usacoprob2?a=0ypAbo0pjhC&S=sprime我的想法很简单,就是先生成一位数的素数,在这基础上生成二位,然后再生成三位四位。。。有一个很简单但是很实用的优化,注意到,素数的各位必定是1,3,7,9,当然一位的素数2,3,5,7,另当别论。这样,我们只需在前一位的基础上添上1,3,7,9,然后逐个判断是否为素数。很简单,但是原创 2013-04-26 19:53:54 · 418 阅读 · 0 评论 -
USACO-Checker Challenge
http://ace.delos.com/usacoprob2?a=GILo2ACzmVw&S=checker 经典到烂的n皇后问题。。。题目最坑的地方是不能打表。。。 朴素的DFS是绝对不行的,要改,怎么改?最简单的是改判断方法。 这是最朴素的判断函数: bool check(int dep,int x){ for (int i=1;i) if (f原创 2013-04-26 19:53:57 · 556 阅读 · 0 评论 -
USACO-Ordered Fractions
http://ace.delos.com/usacoprob2?a=B9V6yMSRsQa&S=frac1 对这一题彻底无语。。。。。 简单的排序,竟然放在chapter2中。。。。 而最可恨的是USACO的评测。。。 #include #include #include using namespace std; const double XX=0.0000000原创 2013-04-26 19:54:01 · 355 阅读 · 0 评论 -
USACO-Sorting a Three-Valued Sequence
http://ace.delos.com/usacoprob2?a=kPNDMRfiMdD&S=sort3 这题初看似乎比较麻烦,仔细想想,也就这么回事了。 手工模拟一下排序的过程,然后对比排序前后的数列,很容易发现,交换只发生在以下情况:1.交换一次能够使得两个数都到达最终位置(这个显然的);2.两次交换能够使得三个数到达最终位置。只能有这两种情况了。 位置: 1 2原创 2013-04-26 19:54:03 · 350 阅读 · 0 评论 -
USACO-Subset Sums
http://ace.delos.com/usacoprob2?a=HM3rU6DlsPt&S=subset 这题最初的想法是:DFS,因为两个集合理论上是一样的,所以处理时只需处理一个集合,另一个集合自然就出来了。 DFS的程序很好写,这是主要的实现函数: void dfs(int suml,int h) //sum保存当前的集合元素的和,h保存上一次取的数{ i原创 2013-04-26 19:54:15 · 322 阅读 · 0 评论 -
USACO-Runaround Numbers
http://ace.delos.com/usacoprob2?a=UkLvQCyPwKH&S=runround 这题给跪了。。。谁出的题?题意太模糊了。。。理解错了n次题意。。。。。 这是所谓的翻译(这个翻译还算不错): Runaround Numbers 循环数 循环数是那些不包括0 这个数字的没有重复数字的整数 (比如说, 81362) 并且同时具有一个有趣 的性质,原创 2013-04-26 19:54:17 · 374 阅读 · 0 评论 -
USACO-Longest Prefix
题目来源:http://ace.delos.com/usacoprob2?a=eORCKYsuBVM&S=prefix 水水的DP,水水地过。 定义布尔数组F[],F[i]表示第i个字符的可匹配性,如果能匹配到i,则F[i]为true,否则为false,最后的结果就是f[k]为true时的最大的k。 方程:F[i]=F[i] || F[i-size[j]] ,其中,size[j]表示第j原创 2013-04-26 19:54:22 · 312 阅读 · 0 评论 -
USACO-Cow Pedigrees
来源:http://ace.delos.com/usacoprob2?a=T9Gq2i9yzJN&S=nocows 题目要求的是,用N个结点能够构造多少个高为K的二叉树,要求二叉树的结点的度为0或2。 首先,我们要关注的是树的高度和结点数。再者,这题的所有结点的度都为0或2。 考虑到结点度的特殊性,如果把高为K的树的根结点删去,则生成两个高为K-1的子树T1和T2,它们的结点数和为N-1原创 2013-04-26 19:54:27 · 396 阅读 · 0 评论 -
USACO-Fractions to Decimals
来源:http://ace.delos.com/usacoprob2?a=ecro6SKAJN4&S=fracdec 这题主要是处理循环节的问题。 先考虑竖式除法: 1.设被除数为A,除数为B,试除一次有:B/A=C……D 2.令B不变,被除数变成D*10,再进行试除 3.明显竖式除法是递推定义的,而出现循环节则表示被除数重复出现了,由此算法已经很明显了,不再多说。 唉,明明很简单的东原创 2013-04-26 19:54:48 · 416 阅读 · 0 评论 -
USACO-Score Inflation
来源:http://www.nocow.cn/index.php?diff=next&oldid=2732&title=Inflate_translate 这是一题非常标准的完全背包问题,不会的参见DD神牛的背包九讲 /*ID:ay27272PROG:inflateLANG:C++*/#include using namespace std;#defi原创 2013-04-26 19:54:52 · 358 阅读 · 0 评论 -
USACO-Prime Palindromes
http://ace.delos.com/usacoprob2?a=SFbMUjuLYE9&S=pprime 额。。。用了一种很笨的方法,速度极慢== 首先这里不能先求素数再求回文,时间上肯定过不了。 要先生成回文数,再判断是否为素数。 我的方法:直接枚举回文数的前半部分,然后把数扩展成回文数,判断是否为质数。 主要步骤: 1.筛法求出10000以内的素数,在后面的素数判断中可以加快速原创 2013-04-26 19:53:52 · 439 阅读 · 0 评论 -
USACO-Hamming Codes
http://ace.delos.com/usacoprob2?a=4g9XJlxo9kU&S=hamming 懂异或的人都会这题。水题,不过要了解好题意,这里的两两编码之间的距离指的不是一定要在邻近位置,应该是所有数都应该成立的一条规定。 比如样例: 0 7 25 30 42 45 51 52 75 76 82 85 97 102 120 127 25与其他所有数都应该满足海明距离,原创 2013-04-26 19:54:08 · 314 阅读 · 0 评论 -
USACO-Agri-Net
来源:http://ace.delos.com/usacoprob2?a=ecro6SKAJN4&S=agrinet 这题明显的最小生成树,说多了都侮辱我的智商了= = /*ID:ay27272PROG:agrinetLANG:C++*/#include #include #include using namespace std;#define原创 2013-04-26 19:54:50 · 383 阅读 · 0 评论 -
USACO-Contact
来源:http://ace.delos.com/usacoprob2?a=5LTgWx8eTT9&S=contact 这题的想法是,把01串转换成二进制,用hash表存储。 为了区分0和00等类似的情况,将所有的子串的高位加个1,例如: 0就用10来存储,00用100存储。 hash表统计子串个数,然后排序输出就是了。 不过如果用string存储输出的数据,直接输出string,总原创 2013-04-26 19:55:25 · 546 阅读 · 0 评论 -
USACO-Spinning Wheels
来源:http://ace.delos.com/usacoprob2?a=ahwL0nwmf1s&S=spin 暴力,水水的过了。 耗时估计是:360*360*n,n为总的缺口数。 由于n越大,缺口数越多,通光的几率越大,故根本不必在意时间的消耗。 #include #include #include using namespace std;st原创 2013-04-26 19:55:31 · 371 阅读 · 0 评论