- 博客(17)
- 收藏
- 关注
原创 BadNeighbors (TCCC '04 Round 4 Div1 250)
题目:http://www.topcoder.com/stat?c=problem_statement&pm=2402&rd=5009如果没有形成一个环,那么题目很简单,就是一个最基础的DP题。只要用一个数组dp,dp[i]代表0...i之间的所能筹到的最大款项,dp[v.size()-1]则为所求。形成环以后,第0个住房和第n-1个住户就不能同时同现了。可以把数组分成两个。一
2009-05-15 20:48:00 1588 1
转载 诗zt
是什么让你的眼神如此无助 是什么让你的脸庞如此忧伤 是什么让你的内心如此迷茫 是什么让你的脚步如此彷徨 人人免于匮乏 人人免于恐惧 大家都能平等自在地交往 这就是我们最大的渴望 你要知道 有时沉默也是一种力量 可是你总要给我们一个可以看得见的方向 每一个心中都有一个天堂 那是人类挣脱心灵枷锁 寻找伊甸园过程中永不熄灭的回响 多年以后 马丁路德的梦想仍在我们胸中激荡 我们会一同祈祷 让自由的呼声响彻
2008-12-03 08:59:00 646
原创 SRM 421Div2 500
fail system test了。郁闷的精度问题。题目要求精度为1e-9,所以我判断的时候想都没想, 在判断浮点数是否为0的时候就取精度为1e-9了。。。真是没脑子。。double的有效精度为16位。后来看Allie的解法,他根本没判断精度,直接逐步求精300次就ok了。。看来我的经验还是太少了。。。
2008-10-09 10:34:00 406
原创 USCAO Chap4 Fence Loops
很久没有做usaco了。这道题其实挺简单,可是我想了一天多。。。思路还是太死板了。这道题的关键是把输入转换成图,然后求最小路径。输入转换图我是这样做的,主要思路是给每一条边的两个顶点编号,如果该点已经存在,则赋值,否则编号数加1。要实现这个,我是从第一条边到最最后一条边依次处理的。对于每一条边,若这条边与编号小的边相连,则可以肯定,这个顶点已经编过号了,所以只需找出这个编号就可以了。否则,这个点是
2008-10-06 20:14:00 783
原创 郁闷的SRM417
昨天做的时候感觉还不错,cha完排在小组第一,今天早上一看,div2 500的题居然没过。。汗原来把string的substr(start,len)函数给弄错了。我把那个len当作end了。。。对stl不熟啊。。可恶的是几个test都过了,就没仔细查文档就交了。。1000的题其实很简单,,可惜一开始就想错了,越做越麻烦。归根结底,还是基础不扎实啊。不过rate还是涨了一点:).
2008-09-12 08:36:00 724
原创 memcpy和bcopy
memcpy()和bcopy()的区别在于:memcpy将参数中第二个字符串拷贝到第一个字符串,bcopy相反。另外,memcpy不能处理地址重叠的情况,需用memmove.bcopy可以处理。memXXX()函数家族一个特点是最后一个参数都是一个长度参数。
2008-09-11 16:26:00 1350
原创 判断endian的小程序
#include int main(){ union { int i; char ch[sizeof(int)]; }u; u.i = 0x0102; if(u.ch[0]==2&&u.ch[1]==1){ printf("little endian/n"); }else
2008-09-11 16:04:00 447
原创 USACO: Chap3 Riding the Fences
这道题是关于Eulerian回路/路径的,虽然算法比较简单,但我并没弄清原理。。。照抄text上的算法。但仍然提交了n次,归其原因,还是因为老毛病,对题意没理解透彻就急着写程序。效率问题:开始是建图的时候进行插入排序,后来改成直接插入,最后再排序,效率提高很多。
2008-09-04 21:00:00 488
原创 USACO: chap3 Sweet Butter
这是一道最短路径的题,开始图简便用floyd算法,结果超时。后来用Dijkstra算法,还是超时,因为求新加入的结点时我用的是线性算法,复杂度还是O(n^3).注意到这个图是一个稀疏图,因此用一个heap来实现求最近点,这样复杂度为O(n^2logn)。注:priority_heap是一个大顶堆另外知道了gdb的display命令。每到断点的时候自动显示变量的值,原来我一直n,p variable
2008-09-02 14:18:00 433
转载 zz5个数用7次比较进行排序
TAOCP 第三卷 17x 页, 中文版cmp(a,b) -> max(a,b) = h, min(a,b) = icmp(c,d) -> max(c,d) = j, min(c,d) = kcmp(h,j) -> max(h,j) = o, min(h,j) = p则 a, b, c, d 可以在三次比较后构成 a -> c / /b d这样
2008-09-01 20:50:00 624
原创 Chap1 Milking Cows
用模拟的方法,将农夫进入和离开的时间存放一个数组后排序。然后扫描数组,如果是进入,则在农场的农夫数加1,否则农夫数减1。这样最长的没挤奶时间为农夫数为0的最长时间,其他时间间隔为挤奶时间。一个小细节要注意的是,当一个农夫在某一时间离开,且另一农夫在这同一时间进入的时候,要把进入事件排到离开事件的前面,不然的话就会在这一点形成农夫数为0的时刻,从而出现错误。
2008-08-26 20:09:00 382
原创 dirent的char d_name[1]问题
SunOS中dirent中的文件名定义为char d_name[0];这样,分配的时候malloc分配空间给d_name但是并不d_name本身并不占用空间.若声明为指针,则会多4个字节.分配方式如下.实际上把d_name这个结构的空间和字符串的空间放在一起,d_name就是name的首地址,起一个标号的作用.很明显,这个d_name必须是结构体中的最后一个元素,不然是不成立的.struct di
2008-07-19 08:45:00 1668
原创 USACO:Milk
一上来我直接排序然后贪心,时间复杂度是O(nlgn).手动搞了个堆排序。提交后,看了analysis。大觉汗颜,自己的思路还是太狭隘了。其实price的最高就是1000,建一个1000的数组,进行计数,复杂度只有O(n)
2008-06-27 17:27:00 501
原创 USACO:Name That Number
第一思路是backtracing,然后二分查找字典。结果第10个例子超时。然后就没办法了。只能上网搜搜。。汗。看到一个反向转换的思路,然后顿时觉得自己太笨了,没想到这样做。字典才50,000条,backtracing的话是3^12个。赶紧写了个提交,才过。官方的答案是这两种思路都有。不过貌似用C++
2008-06-13 09:21:00 331
原创 Milking Cows
这本是一道很简单的题,我却做了很长时间,究其原因,我想主要是不熟练,不自信。主要思路就是按到达时间排序,将相邻的时间全并,复杂度主要是排序,是O(nlogn).提交后,看分析,有一个算法很巧妙,把每一个农夫的到达和离开看作一个事件。然后对事件进行排序。有一个农夫则农夫数加一,有一个农夫离开则农夫数减一。
2008-06-12 20:58:00 482
原创 教训:vector的size()是无符号型
今天做一道Div2的250分的题,有个例子居然没过,报错是段错误。。查了良久,未果,后来才发现,vector的size()是unsigned的。我用它减2后判断边界。。结果 -1被当成一个正数了。。惨痛啊。还好是practise.
2008-06-07 20:48:00 841 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人