USACO算法系列
无能所以愤怒
犹豫彷徨是没有意义的,前进,只有前进才能改变当前的状况。
展开
-
百度笔试题 A的B次方的后三位
今天被同学问到这样一个题目: 求A^B的最后三位数表示的整数。(1)。如果直接求A^B次方的话,显然会超出数据类型的表示范围。但是仅仅作为后三位来说的话,最后三位的乘积实际上只跟上一次乘积的后三位有关,如(1234 * 1234) %1000 == (234 * 2原创 2011-10-10 23:14:22 · 1666 阅读 · 0 评论 -
USACO算法系列四十一——fc
<br /> 题目:http://www.nocow.cn/index.php/Translate:USACO/fc<br /> 求所有点的凸包的最小周长。<br /> 利用的是“卷包裹”算法:http://www.nocow.cn/index.php/Graham_Scan<br /> 算法描述如下:<br /> 找出一个必定会在凸包内的中点 计算每个点和中点的连线与x轴的夹角(在 0——360 度的范围内) 根据这些夹角对顶点排序 加入最初的两个顶点 对于除最后一个顶点以原创 2011-01-06 16:39:00 · 508 阅读 · 0 评论 -
USACO算法系列四十——frameup
<br /> 题目:http://www.nocow.cn/index.php/Translate:USACO/frameup<br /> 第一次理解这道题目的时候理解错了。这句话很关键:“矩形的每条边中,至少有一部分是可见的。注意,一个角同时属于两条边。”<br /> 也就是说每条边至少有一个点是可见的,这样我们就可以确定出矩形的边框。<br /> 这样就可以确定出整个矩形,然后利用深度遍历的方法,搜索出所有的答案。<br /> 代码如下:<br />#include <io原创 2011-01-05 14:24:00 · 476 阅读 · 0 评论 -
USACO算法系列三十九——milk6(续)
<br /> 别人提供了一个解决方案,http://dementrock.blog.com/2009/06/usaco-442-pollutant-control/<br /> 很明显地,这是一个最小割的模型,设每边的权值为原始权值,则最大流的值就是最小割的容量,即最小损失。现在有两个问题:停止的线路数,使开始输入顺序最小。<br /> 为解决这两个问题,可将每边的权值修改为500000+i+500000*1001*c,这个式子有什么用呢?首先,每边的权值都加上500000,那么最大流(原创 2011-01-04 21:03:00 · 605 阅读 · 0 评论 -
USACO算法系列三十八——milk6
<br /> 题目:http://www.nocow.cn/index.php/Translate:USACO/milk6<br /> 这道题超级麻烦,想了我好几天,现在能写出来的方案,也只能解决小数据量问题,对于大数据量问题还是很有难度。<br /> 我的方法是:首先,这是一道最大流最小割问题,也就是在去掉k条边以后,使得左右两侧的边的节点之间的流为最大流,并且k最小。<br /> 因此,第一步我先求出图的最大流。使用的就是前面求出最大流的方法。<br />原创 2011-01-04 18:07:00 · 486 阅读 · 0 评论 -
USACO算法系列三十七——shuttle
<br /> 题目:http://www.nocow.cn/index.php/Translate:USACO/shuttle<br /> 将左边的所有W移动到最右边,将右边的所有的B移动到最左边。如果通过模拟的话,我觉得会超时,但是并不用模仿每一步移动步骤。<br /> 因为可以通过以下几个规则一定可以得到结果。<br /> 如果"WB_"模式,则"_BW",如果"_WB",则"BW_", 否则轮流移动左右侧的格子。如<br /> WW_WBBB //左移动原创 2011-01-01 20:44:00 · 447 阅读 · 0 评论 -
USACO算法系列三十六——lgame
<br /> 题目:http://www.nocow.cn/index.php/Translate:USACO/lgame<br /> 这道题看起来数据量很大,而且不知道40000字典,实际上经过处理以后数据量不大。<br /> 第一步预处理,读入数据的时候,如果长度超过现有的字符串长度,删除。<br /> 第二步预处理,读入数据的里面字符的个数多于我们拥有的字符个数删除。<br /> 第三步词对组合判断完以后,能够得到最大的字符值,此时,我们打印结果时,只要打印字符串的值为最原创 2011-01-01 14:03:00 · 486 阅读 · 0 评论 -
USACO算法系列三十四——prime3
<br /> 题目:http://www.nocow.cn/index.php/Translate:USACO/prime3<br /> 我没打算做这道题,太恐怖了。看看漂亮的暴力解法<br />#include<stdio.h>#include<string.h>int a[6][6],ss[100000],n,sum;char ans[201][27];int main(){ FILE *fi,*fo; fi=fopen("prime3.in","r"); f原创 2010-12-30 17:16:00 · 427 阅读 · 0 评论 -
USACO算法系列三十三——buylow
题目:http://www.nocow.cn/index.php/Translate:USACO/buylow原创 2010-12-29 15:38:00 · 378 阅读 · 0 评论 -
USACO算法系列三十一——stall4(续)
<br /> 早上实现了第一个想法,使用DFS遍历搜索的算法。在TEST6的时候就挂掉了。<br /> 第二个想法是采用最大流算法。在n和m之间多加了两个节点,作为起点和汇点。如下图所示:<br /><br /> 然后使用最大流算法就可以了。<br />#include <iostream>#include <fstream>#define SIZE 402#define LARGER 0X7FFFFFFFusing namespace std;原创 2010-12-28 20:12:00 · 330 阅读 · 0 评论 -
USACO算法系列三十五——race3
<br /> 题目:http://www.nocow.cn/index.php/Translate:USACO/race3<br /> 寻找从起点s到达终点t的必经路径。和寻找中间点,中间点满足后半段路程不能回到前半段路程。<br /> 必经节点,假设节点不存在,如果能从s点走到t,则不是必经路径,否则是。<br /> 中间点,前半段走到中间点,所有点标为RED,从中间点走到t点,所有节点标为BLUE,如果出现BLUE覆盖RED,则不是中间点。<br /> 采用的都原创 2010-12-31 09:17:00 · 474 阅读 · 0 评论 -
USACO算法系列三十二——job
<br /> 题目:http://www.nocow.cn/index.php/Translate:USACO/job<br /> 很有意思的一道题目,一个产品要经过A,B两道工序,A系列机器加工时间为A1,A2,A3,A4……,B系列工序的处理时间为B1,B2,B3,……要求A,B系列处理完这些产品(n)时间最短。<br /> 第一道工序很简单,使用贪心算法就可以了。即,把产品分配到生产完这个产品的时间最短的机器上,即min(use[i]+a[i]),use[i]为Ai机器已经使用的时间原创 2010-12-29 09:45:00 · 493 阅读 · 0 评论 -
USACO算法系列二十八——ditch
题目:http://www.nocow.cn/index.php/Translate:USACO/ditch 最近这段时间天气变化比较厉害,一不小心得了重感冒,每天头脑都昏昏沉沉的,然后新的一节是关于最大流的。以前还没有详细的看过这方面的资料,所以最近找了本算法导论,看了一下图论里面的最大流算法。觉得这本书讲的比网上的资料思路清晰一些,网上很多资料都是概述性的,知其然,不知所以然。所以我建议还是看看算法导论这本书,但是我发现这本书,还是有些错误的,第401页的图26-3 b)我觉得少了一条v3原创 2010-12-26 16:07:00 · 527 阅读 · 0 评论 -
USACO算法系列四十三——theme
<br /> 题目:http://www.nocow.cn/index.php/Translate:USACO/theme<br /> 求最大重复主题序列的长度,让我想起了求最大重复子串,最大重复子串的解法,我觉得这个博客写的很好。我们可以一起学习一下(http://www.cnblogs.com/dyh333/articles/1801714.html)<br /> 但是这道题跟最大重复子串有些不一样的地方。<br /> 第一,子串不允许重叠。<br /> 第二,子串的主题重原创 2011-01-07 15:29:00 · 437 阅读 · 0 评论 -
USACO算法系列四十四——snail
<br /> 题目:http://www.nocow.cn/index.php/Translate:USACO/snail<br /> 直接深度搜索。我还以为会超时,没想到AC了。代码如下:<br />#include <iostream>#include <fstream>#define SIZE 121#define UP 0#define RIGHT 1#define DOWN 2#define LEFT 3using namespace std;原创 2011-01-10 13:47:00 · 369 阅读 · 0 评论 -
USACO算法系列四十六——milk4
<br /> 题目:http://www.nocow.cn/index.php/Translate:USACO/milk4<br /> 一个整数使用给定的整数集合当中最小的整数集合进行划分,要求使用的集合最少,其次使用的整数最小。<br /> 第一个方法,我想使用0-1背包进行解决,但是发现做出来可以满足,最小的整数集,但是无法保证集合最小。代码如下:<br />#include <iostream>#include <fstream>#include <algorithm>#d原创 2011-01-12 10:51:00 · 521 阅读 · 0 评论 -
USACO算法系列——讨论篇
<br /> 这道题目来自于我同学的口述,大意是这样,有N个房间,编号为1,2,3……N,里面有1个宠物,然后你每次只能打开一个房间,如果没有找到,宠物必须随机向左向右移动一次,问你如何以最快的开门方式找到宠物。<br /> eg,有3个房间,那么你只要至多打开中间的房间两次就可以找到宠物了。<br /> 分析:用N个位来表示N个房间,0:代表有宠物,1:代表没有宠物。则当N=3时,宠物的初始状态可能为<br /> 1)100<br /> 2)010<br /> 3)001<br原创 2011-05-03 23:11:00 · 527 阅读 · 0 评论 -
USACO算法系列——北大ACM(番外篇)
<br /> 为了参加周末北大举行的比赛,特意上北大ACM网站做了几道题。北大的有道算法比赛,还真是难啊,估计只能去打酱油了。唉,现在USACO还差最后的10题。希望能在这周和下周完成吧,完成了也算是做完了一件事。<br /> 讲讲今天在北大做的那几道题吧。<br /> 第一题1000,a + b. 没什么好说的,只是为了让大家熟悉一下这个平台。像我这种不熟悉平台,上来就直接敲代码的,第一次提交自然是OVER的。那里的提交不是直接读写文件,而是直接读取流,为了便于调式,用宏定义,写了一个o原创 2011-05-03 21:35:00 · 783 阅读 · 0 评论 -
USACO算法序列四十九——latin
题目:http://www.nocow.cn/index.php/Translate:USACO/latin 题目大意为,矩阵的魔幻变化,我采用模拟的方法,结果超时了。晚上再想想吧。好久没做USACO了,还剩最后几道题,加油啊!#include#include #define SIZE 8using namespace std;ifstream fin("latin.in");ofstream fout("latin.out");int row[SIZE]原创 2011-04-28 14:55:00 · 498 阅读 · 0 评论 -
2005年百度之星预赛第三题
题目描述:请编写程序,根据指定的对应关系,把一个文本中的字符串替换成另外的字符串。输入数据:程序读入已被命名为 text.txt 和 dict.txt 的两个输入数据文本文件, text.txt 为一个包含大量字符串(含中文)的文本,以 whitespace 为分隔符; dict.txt 为表示字符串( s1 )与字符串( s2 )的对应关系的另一个文本(含中文),大约在 1原创 2011-06-07 18:49:00 · 480 阅读 · 0 评论 -
2005年百度之星预赛第二题
第二题(共四题 100 分):重叠区间大小( 20 分) 题目描述:请编写程序,找出下面 “ 输入数据及格式 ” 中所描述的输入数据文件中最大重叠区间的大小。 对一个正整数 n ,如果 n 在数据文件中某行的两个正整数(假设为 A 和 B )之间,即 A或 A>=n>=B ,则 n 属于该行;如果 n 同时属于行 i 和 j ,则 i 和 j 有重叠区间;重叠区间的大小是同时属于原创 2011-06-06 09:46:00 · 683 阅读 · 2 评论 -
2005年百度之星预赛第一题
题目描述:一个正整数有可能可以被表示为 n(n >= 2) 个连续正整数之和,如: 15=1+2+3+4+5 15=4+5+6 15=7+8 请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。 输入数据:一个正整数,以命令行参数的形式提供给程序。原创 2011-06-03 11:18:00 · 819 阅读 · 0 评论 -
Google Code jam——Radio Receiver
题目:http://code.google.com/codejam/contest/dashboard?c=842485#s=p2 题目大意是,能否从用户选定的一个点A出发,遍历所有的路径,每条路径只能遍历一次,最后返回点A,如果不能,问需要添加的最少的路径数?每两个点之间可以添加任意条路径。 是《离散数学》图论的知识,第一,首先必须是连通图,因为要遍历所有的路径。其次,因为从点A出发,又要重新返回点A,所以所有的点的度数必须为偶数。 因此我的做法是,先找出所有的联通子图,统计连通子图能否原创 2011-03-30 16:51:00 · 634 阅读 · 0 评论 -
USACO算法系列——Big Barn
<br /> 题目:http://www.nocow.cn/index.php/Translate:USACO/bigbrn<br /> 计算最大的正方形块。area[i][j]:表示以i,j为右下角的正方形的宽度。则<br /> area[i][j] = min(area[i-1][j],area[i][j-1],area[i-1][j-1])+1.<br /> 代码如下:<br />#include <iostream>#include<fstream>#define SIZE原创 2011-03-29 23:13:00 · 647 阅读 · 0 评论 -
ACM算法系列——google code jam 2011 Problem D GoroSort
题目:http://code.google.com/codejam/contest/dashboard?c=975485#s=p3&a=3 看了最终的Analysis以后,发现自己当时的思维陷入了一个死胡同。 错误的想法: 当时我是这么想的,假设只有两个数字的时候,即 2, 1的情况下,那么拍一次出现的情况为2,1 或者1,2. 则正确排序的情况为1/2。 假设只有三个全部乱序的情况下(三个数字中,如果一个是正确,两个乱序的情况,按照上面一种情况考虑,如1,3,2,原创 2011-05-10 22:00:00 · 1155 阅读 · 2 评论 -
USACO算法系列四十七——window
<br /> 题目:http://www.nocow.cn/index.php/Translate:USACO/window<br /> 题目大意是在四个窗体操作和一个显示操作过程中,显示指定窗体的可见窗体比率。<br /> 我的第一种方法是使用模拟的方法,声明了一个长度为62的窗体结构体数组,0-9表示窗体标示为‘0’-‘9’的窗口,10-36标示‘a’-‘z’的窗体。然后不断的读取指令,对窗体的操作改为对结构体数组中窗体的修改。<br /> 窗体结构体如下:<br /> //窗体原创 2011-02-17 09:35:00 · 463 阅读 · 0 评论 -
USACO算法系列四十五——wissqu
<br /> 题目:http://www.nocow.cn/index.php/Translate:USACO/wissqu<br /> 采用的是深度搜索的方法。发现现在使用深度搜索的频率不断升高了。其实程序昨天就写好了,但是怎么运行都没有结果,调试也觉得没有问题,一度让我处于崩溃的边缘。休息了一天,今天重新调试了一下,发现原来是数据输入的时候出错了。A:3,B:3,C:3,D:4,E:3。写成了A:3,B:3,C:4,D:3,E:3。难怪一直没有结果了。<br /> 代码如下:<br原创 2011-01-11 10:10:00 · 417 阅读 · 0 评论 -
USACO算法系列(小结)
<br /> 开始做USACO题目是在2010年的7月份吧,本来打算花3-4月时间利用课余时间做完所有的题目,但是中间断断续续的一直做到现在,已经半年多了,现在还有15道题吧。<br /> 我不知道自己提高了多少,很多次都想放弃了。一是因为平时工程项目挺紧的,二是因为寂寞啊。但是那一串串AC的字符串一直鼓励着我,好不容易走到现在。现在快过年了,心情也没办法平静下来,每天校内,sina,qq的逛,虽然觉得很浪费时间,也曾经一度想把校内停掉,但是尾大不掉,人生就是不断的挣扎,要不就安心堕落,我不想堕落,原创 2011-01-13 13:39:00 · 855 阅读 · 0 评论 -
USACO算法系列三十——stall4
<br /> 题目:http://www.nocow.cn/index.php/Translate:USACO/stall4<br /> 第一个想法,深度搜索回溯吧。虽然我觉得时间会通不过,但是还是试一下。<br /> 第二个想法,就是在前面和后面都添加一个节点,形成一个流,用最大流的思想解决。<br /> 先实现了一下第一个想法。<br /> #include <iostream>#include <fstream>#define SIZE 200usi原创 2010-12-28 13:10:00 · 376 阅读 · 0 评论 -
USACO算法系列二十九——ditch(续)
<br /> 可恶的感冒终于好了。<br /> 调试了一下,发现在DFS中,原先走过的路径一直重复,没有办法优化,所以改用BFS算法找增广路径,顺利通过了。过两天学习一下压入重置算法。<br />#include <iostream>#include <fstream>#define SIZE 201#define LARGER 0X7FFFFFFF#define min(a,b) (a)<(b)?(a):(b)using namespace std;原创 2010-12-28 11:05:00 · 366 阅读 · 0 评论 -
USACO算法系列十——spin
题目:http://www.nocow.cn/index.php/Translate:USACO/spin 题目很长,而且比较难以理解。大概意思就是转动五个纺织轮子,直到他们的五个缺口重合为止。 没有好的想法,还好数据量不大,模拟吧。由因为转动360秒以后,所有轮子回到起始角度。因此如果360秒以后还没有出现重合情况的话,就可以退出循环了。 模拟累加轮子的角度并不难,难的是如何判断五个轮子重合呢?起初我也没有很好的方法,一个个去判断重合区域实在是太麻烦了。后来想到一个好方法。把36原创 2010-10-11 15:42:00 · 701 阅读 · 0 评论 -
USACO算法系列十六——camelot
<br /> 题目:http://www.nocow.cn/index.php/Translate:USACO/camelot<br /> 题目挺好理解的,但是没有清晰的思路,只靠不断的模拟,目前USACO里面,我写过的最长的算法程序。而且还没通过,各种抓狂中……<br /> 先插代码,实在没有很好的想法,悲剧啊,难到这就是局限了。欢迎大家给意见<br />#include <iostream>#include <fstream>#include <math.h>#define原创 2010-12-03 23:46:00 · 545 阅读 · 0 评论 -
USACO算法系列九——kimbits
<br /> 题目:http://www.nocow.cn/index.php/Translate:USACO/kimbits<br /> 求出可以用<=K个1表示的长度为N的二进制串的最小的第I个数。又是01字符串,最先想到方法是遍历1~2^N-1的自然数,如果其中包含1的个数<=K个1表示,则计数加1,直到I为止。但是想想2^31次方可以表示接近2 0000000000的整数,肯定会超时的。<br /> 如果把二进制串当作二叉树的叶子节点,然后采用前序遍历的方式对二叉树进行遍历,往左边走,原创 2010-10-10 19:47:00 · 561 阅读 · 0 评论 -
USACO算法系列八——fact4
<br /> 题目:http://www.nocow.cn/index.php/Translate:USACO/fact4<br /> 题目大意是求N!的倒数第一个不是0的位数值。题目也很明确跟我们说了:阶乘会很快的变大,如13!就必须用32位整数类型来存储,70!即使用浮点数也存不下了。 因此用一个大整数来存储N!,然后再求倒数最后一位的尾数,似乎不太现实。我们假设N! = X * 10 ^ K(X的尾数不为0)。则我们要求的是X %10。但是即使是这样子的X也是非常大。我们又可以考虑一下,实原创 2010-10-10 09:13:00 · 488 阅读 · 0 评论 -
USACO算法系列六——contact
<br /> 题目:http://www.nocow.cn/index.php/Translate:USACO/contact<br /> 题目很长,又是奶牛,又是望眼镜,还有地外生物的。很佩服外国人的想象力,一道算法题也能联系出一部星际大战出来。<br /> 题目大意,简而言之,就是统计由01组成的字符串当中,长度在A到B之间(1<=A<B<=12)的字符串出现的频率,然后把前N个最大频率的字符串打印出来。<br /> 看起来是简洁多了,但是题目还是比较复杂的。想到了两种方案:<b原创 2010-10-08 22:48:00 · 3104 阅读 · 0 评论 -
USACO算法系列三——agrinet
题目:http://www.nocow.cn/index.php/Translate:USACO/agrinet 这道题目没什么好说的,求图的最小生成树问题。有两种算法Kruskal算法和Prim算法。但是看了USACO的参考答案以后,发现自己对空间的利用还是不够。知道思想,如何用简单利索的语言实现,高效而准确。#include #include #define MAX 100#define LARGE 999999999using namespace std;原创 2010-10-07 13:48:00 · 484 阅读 · 0 评论 -
USACO序列一-humble
题目:http://www.nocow.cn/index.php/Translate:USACO/humble 题目的大意是,给你一些排序的质数,然后要你求出由这些质数作为质因子的第几小的丑数。 看到这道题的时候,有两种想法,第一种是遍历从最小的丑数开始的自然数,判断这个自然数是不是丑数,直到找到第n个丑数为止。这样做的好处是,想法简单,避免了由质数相乘得到的丑数的排序过程。代码如下:#include #include #define MAX 100using namespa原创 2010-10-07 13:28:00 · 502 阅读 · 0 评论 -
USACO算法系列十四——fence
题目:http://www.nocow.cn/index.php/Translate:USACO/fence 看完这道题目的第一想法就是,遍历所有的边,而且每一条边的经过次数只能一次。原创 2010-11-30 22:24:00 · 634 阅读 · 0 评论 -
USACO算法系列十三(续)
<br /> 好长一段时间没有碰算法了。一方面最近导师的事情比较多,另一方面最近碰到一些很不开心的事情,而且接二连三的,导致自己堕落了好长一段时间。<br /> 立志不坚,终不济事。以后要坚持下去,而且把原先落下的一一补回来。<br /> 接着说那道题吧,其实这道题的思路很简单。也就是很简单的最短路径算法。最常用的算法包括以下几种:<br /> 1 Dijkstra算法<br /> 2 Bellman-Ford算法<br /> 3 SPFA算法:是原创 2010-11-29 17:49:00 · 571 阅读 · 0 评论 -
USACO算法系列五——rect1
题目:http://www.nocow.cn/index.php/Translate:USACO/rect1 最简单的想法是声明一个N*N的二维数组,用于表示单位1的矩形,二维数组的初始值为1,表示初始的颜色。一层一层的往上覆盖,不断更新数组的颜色值,最后统计一下二维数组里面各个颜色的个数就可以得出结果了。然而这种想法存在着严重的缺陷,第一时间,每次更新都需要更新A * B的空间,因此时间为o(N*A*B),加上最后统计,因此时间为o( A * B),因此最后的时间为O(N*A*B),A*B已原创 2010-10-07 22:23:00 · 509 阅读 · 0 评论