ACM
文章平均质量分 62
dollarzhaole
这个作者很懒,什么都没留下…
展开
-
POJ 1125 Stockbroker Grapevine
#include #include #include #include #include #include #include //#include #include #include const int INT_MAX = (1 << 21);using namespace std;int d[105][105];struct Node{ int x, y, d原创 2012-07-10 15:27:15 · 367 阅读 · 0 评论 -
USACO section 1.2.1 Milking Cows
1. 算法:把所有的时间按照开始的时间从小到大排序,然后设当前cur为目前的至少有一个工作的时间段,判断下一个时间段是跟这个时间段交叉还是包含在这个时间段之内还是在这个时间段之外,根据这三种不同过的情况,分别得到答案。值得注意的是,最后要得到cur的时间段的值,因为前边的循环当中,没有判断跟这个时间段比较的情况。以下是代码:/*ID: dollar4PROG: milk2LA原创 2012-04-08 16:49:33 · 390 阅读 · 0 评论 -
排序算法总结
听了MIT的《Introduction to Algorithm》真是着迷,这里把讲过的伪代码中关于排序的实现了,总结在下边1.插入排序,n方的复杂度void insertion_sort(int arr[]){ for(int j = 1; j < n; j++) { int key = arr[j]; int i = j - 1;原创 2012-03-14 21:17:57 · 279 阅读 · 0 评论 -
The Castle
1.成功的使用结构体:想清楚算法需要记录哪些内容,这些内容之间有什么关系,然后再确定用单个变量还是用结构体,还是用结构体数组;2.位与&运算的使用,第一次接触这一块,还是不明白check()函数中使用&运算的道理,这一部分是借鉴来的,自己写着写着逻辑就混乱了。。。关于位运算(位运算);3.知道了typedef的用法,也算是做这道题的额外收获吧;4.这道题错了好几次,方向弄错,多加ret原创 2012-03-15 13:05:51 · 306 阅读 · 0 评论 -
POJ 1061 青蛙的约会
1. 数学题,欧几里得算法,求不定方程的整数解问题;2. 必要的数学知识(转):此题其实就是扩展欧几里德算法-求解不定方程,线性同余方程。 设过s步后两青蛙相遇,则必满足以下等式: (x+m*s)-(y+n*s)=k*l(k=0,1,2....) 稍微变一下形得: (n-m)*s+k*l=x-y 令n-m=a,k=b,x-y=c,即原创 2012-03-31 10:56:52 · 436 阅读 · 0 评论 -
A Knight's Journey
1.大牛们都说是简单的DFS,想自己A一道,结果还是没A出来,最后还是看了别人的结题报告;2.递归还是不熟悉,做DFS用递归,总是出现错误。通过这个题,用递归函数,首先要包含一个结束条件,然后才能用递归;3.自己第一遍写代码的过程中,学会了用sort()函数对结构体的某一个元素进行排序的方法,参考(C/C++ sort函数的用法_真爱无限_新浪博客);4.自始至终对整道题所要用的变量没原创 2012-03-14 16:05:24 · 332 阅读 · 0 评论 -
Red and Black
#include #include #include using namespace std;char tiles[22][22];int used[22][22];int count, w, h;void countstep(int i, int j){ count ++; if (i > 1 && used[i-1][j] == 0) //向上 {原创 2012-03-13 17:59:15 · 306 阅读 · 0 评论 -
POJ 1281 MANAGER
1. 模拟题,按照题目的要求做即可,但是要细心,比较繁琐,尤其是边界问题;2. 20分钟写完程序,但是WA了七八次,检查了一个小时,最后加上循环输入输出,居然AC了,欲哭无泪。#include #include #include using namespace std;const int MAXn = 10010;bool cmp(int a, int b){原创 2012-03-30 15:20:04 · 668 阅读 · 0 评论 -
poj 2017 Speed Limit
1. 简单题#include #include using namespace std;int main(){ int n, i, ans, t[11], s; while (cin >> n) { if (n == -1) break; memset(t, 0, sizeof(t));原创 2012-03-29 14:49:47 · 295 阅读 · 0 评论 -
Curling 2.0——蛋疼的一道题
1.做得很痛苦的题,过程清楚,也可以用语句描述出来,但是输出结果这块想不清楚;2.参考了别人的代码,跟我写的基本上差不多,只是他递归的时候传递了step,我没有传递,但是设的全局变量,为什么就不行啊??3.这样还一直出错,最后把数组开大了,开到22也不行,直到开到50才AC,为啥啊,范围不就是到20吗?#include #include #include using namesp原创 2012-03-21 23:16:12 · 1065 阅读 · 0 评论 -
常用小知识点备忘
1.字符型数字转换成int型(http://topic.csdn.net/t/20060329/20/4649488.html)原创 2012-03-22 17:42:18 · 348 阅读 · 0 评论 -
POJ 1002 487-3279
1. 试了各种数据类型保存输入的字符串,比如string,字符数组。在string类型中,不能一个一个字符地拷贝字符串,因为字符串末尾还有一个字符。2. 字符型数字转换成int类型;3. 自我感觉change函数写的比较巧妙,跟Curling 2.0有点类似。是把一个数组(有重复元素)无重复的放到另外一个数组。#include#include#include#原创 2012-03-22 17:48:59 · 1236 阅读 · 0 评论 -
POJ 1111 Image Perimeters
1. 写得最有逻辑的一道题了,10次讲座学的最好的就是DFS和BFS了。2. 直接深搜#include #include #include #include #include #include #include #include #include #include using namespace std;int a, b, sx, sy;char map[25][原创 2012-07-10 16:25:53 · 451 阅读 · 0 评论 -
POJ2247 Humble Numbers
#include #include #include #include #include #include #include using namespace std;int num[5845];void f(){ int i, j, k, l, temp; i = j = k = l = 2; memset(num, 0, sizeof(num));原创 2012-07-08 14:00:07 · 414 阅读 · 0 评论 -
【转】素数相关算法总结
定义:除了1和其本身,没有其他约数的数。测试:用n分别试除2到sqrt(n)的数,如果中间有一个能整除,即为合数,否则即为素数bool is_prime(int n)//判断n是否为素数,是素数返回1{ int i; bool flag = 1; for(i = 2; i <= sqrt(n); i++) { if(n % i转载 2012-07-08 21:54:50 · 363 阅读 · 0 评论 -
POJ1308 Is It A Tree?
1. 并查集,有点忘了,看维基百科回顾起来了,三个操作,路径压缩、合并、查找父节点。代码很简单,具体参考http://zh.wikipedia.org/wiki/%E5%B9%B6%E6%9F%A5%E9%9B%862. WA了好多次,最后发现是当空树的时候也是一棵树,fuck。。。#include #include #include #include #include #inc原创 2012-07-07 09:53:04 · 411 阅读 · 0 评论 -
POJ 1915
1. 简单的bfs,有用双向bfs的,但是为了赶进度,以后用双向bfs实现#include #include #include #include #include #include #include using namespace std;int dir[8][2] = {{-2, 1}, {-1, 2}, {1, 2}, {2, 1}, {2, -1}, {1, -2},原创 2012-07-07 15:13:14 · 477 阅读 · 0 评论 -
邻接表建图方法及代码
图论这块挺不好理解的,建图+最短路,代码不容易理解,尤其是建图过程。以下是转的写的很好地一篇博文,图文并茂:邻接表建图法1极大的节省了空间和时间 是建图非常棒的一种方式它利用数组模拟出边与边之间的关系 图示解析(数据为代码中的测试数据):#include #define Maxn 200 using namespace std; str原创 2012-05-09 15:18:25 · 1797 阅读 · 1 评论 -
POJ 1003
1.scanf()的用法,见百度百科;2.scanf用来接收小数,把输入变量声明为float不行,声明为double就可以了,scanf里%f不行,但是%lf就行了。#include int main(){ double sum, in; int num; while(scanf("%lf", &in) != EOF) { if(in原创 2012-03-22 11:10:58 · 268 阅读 · 0 评论 -
POJ 1004 Financial Management
1.输出2位小数,用%.2f表示。%m.nf表示输出数据共占m列,其中有n位小数,左端补齐;#include int main(){ float num[12], ans = 0; for(int i = 0; i < 12; i++) { scanf("%f", &num[i]); ans = ans + num[i];原创 2012-03-22 10:26:05 · 273 阅读 · 0 评论 -
poj 2013 Symmetric Order
1. 简单题,故意用了栈,另外从这个题上可以体会到OJ判题模式#include #include #include using namespace std;int main(){// freopen("input.txt", "r", stdin);// freopen("output.txt", "w", stdout); stack st原创 2012-03-29 14:34:21 · 317 阅读 · 0 评论 -
POJ 1922 Ride to School
1. 简单题,根据题意,这个人总是坐着最先到达的自行车到达,因此只需要算出最先到达的自行车的时间即可。2. 值得注意的是出发时间小于0的,这个人不可能坐上这辆车。#include #include using namespace std;int speed;int stime;double dtime;int main(){ int n, min,原创 2012-03-29 15:25:48 · 343 阅读 · 0 评论 -
小希的迷宫——并查集
1.迄今为止做过的最费劲的一道题,到现在思路还不是很清楚;2.主要考察并查集,并查集的概念(http://www.nocow.cn/index.php/%E5%B9%B6%E6%9F%A5%E9%9B%86)。到目前为止这种思想还没有。3.并查集的主要操作,找父节点,合并,路径压缩;4.刚开始WA,把100000改成100010后AC了就以下是代码:#include原创 2012-02-28 15:16:58 · 341 阅读 · 0 评论 -
bjtuOJ 1139 Longest Common Subsequence
1.动态规划解体方法;2.前几次下标错误。复制代码时一定要检查下标;3.第一次将伪代码转换成代码。以下是代码#include #include //using namespace std;int main(){ int i,j,m,n; char x[1010],y[1010]; while( scanf("%s%s",x,y) !=原创 2012-02-19 14:22:17 · 392 阅读 · 0 评论 -
Tree Recovery解题报告
1.解体思路,寻找先序中序后序中顶点的位置,用递归计算。以下是解体思路:(摘自http://www.cnblogs.com/allensun/archive/2010/11/05/1870214.html)preorder的第一个节点D就是这棵树的根节点,即为postorder中的最后一个元素 然后在inorder中找到该节点D,其左边为ABC为该根节点左子树的inorder,右边EF原创 2012-02-27 17:07:39 · 319 阅读 · 0 评论 -
bjtuOJ1018 Campus Singing Competition
1.由于名字要和选票数一一对应,因此需要用到结构体。在用到结构体的过程中,需要对结构体重用于记录选票数的变量进行初始化,解决方法是利用循环输入时顺便解决初始化的问题。更好的方法,或者利用一个函数就能解决的方法还没有找到;2.第一次用到do…while这样的循环语句,体会和while循环语句的不同;3.如何用指针指向结构体数组的某一个元素,这个问题始终没有解决。如果解决的话,就可以直接用so原创 2012-02-20 10:38:59 · 485 阅读 · 0 评论 -
BJTU1113扫雷问题
1.首次使用cin,cout。使用cin时不能再继续直接在字符串中添加字符,需要用到insert(),而且只能添加字符串;2.判断边界的函数,解决了数组下标越界的问题;3.cin、cout总结“http://www.newsmth.net/pc/pccon.php?id=10002714&nid=359771”4.自己写测试数据,用自己的测试数据调试程序。以下是源代码#in原创 2012-02-19 14:23:15 · 583 阅读 · 0 评论 -
bjtuOJ1019 Robot
1. 从小数找规律,验证规律。这个题,当n前边的数最后为1的方案可以拆分为两个,即最后两步分两步走还是一步走完,而最后为1的方案数等于n-1的方案数。这样就说明out【n】=out[n-1]+out[n-2]2.想清楚这些,代码一气呵成。以下是代码:#include int count[47];int main(){ int i,m,num; scan原创 2012-02-20 11:45:14 · 281 阅读 · 0 评论 -
bjtuOJ1137 蚂蚁爬杆
1.做成之后,检查了三个小时,逐步完善,到最后发现自己把电脑要考虑的工作给做了,需要把所有情况都给列出来,果断放弃。2.最短时间比较好想,左半部分蚂蚁向左走,右半部分蚂蚁向右走,没有碰撞发生。为所有最短时间中的最长的。 最长时间可能涉及碰撞。碰撞其实相当于穿透,-->AB<-- 相当于 因此碰撞可以不考虑。最长时间就是离一端最远的蚂蚁所用时间。 3.正常的思路应该是先求每个位置原创 2012-02-19 20:28:40 · 506 阅读 · 0 评论 -
bjtuOJ 1188 素数筛选
1.素数筛选。利用了每个合数必有一个最小素因子:a.把2~n所有数依次存储在一个数组当中b.从2开始判断一个数是否为素数,紧接着删除这个素数的所有倍数,那么剩下的数里边,最小的数就是素数。c.在程序中有一点最为关键,以下是从一个blog中贴过来的:if(i%pr[j]==0)break;//pr数组中的素数是递增的,当i能整除pr[j],那么i*pr[j+1]这个合数肯定被p原创 2012-02-19 15:50:32 · 355 阅读 · 0 评论 -
Catch the cat使用宽度搜索法BFS
1.典型的宽度优先搜索;2.典型的队列使用问题;3.刚开始一直WA,原来是边界弄错了,切记,越界就是wa以下是代码:#include #include #include #include using namespace std;int step[100010], flag[100010];queue q;void bfs(int n, int k){原创 2012-02-28 17:30:14 · 447 阅读 · 0 评论 -
POJ 1051 P,MTHBGWB
1. C++中string类的练习,使用的数据结构慢慢地开始有心得了;2. string类中的+=操作符和append( )函数的使用;3. 这道题很简单,开始出错是因为string类型的变量没有初始化。string str = "";//初始化为空字符串;4. 推荐一个c++的网站(cplusplus.com - The C++ Resources Network)。#inclu原创 2012-03-26 22:30:59 · 631 阅读 · 0 评论 -
POJ 1005I Think I Need a Houseboat
1.刚开始想成是整个圆了,所以一直出错;2.ceil()函数,第一次用,详见(ceil_百度百科)#include #include using namespace std;const double PI = 3.1415926;int main(){ double x, y, n; cin >> n; for(int i = 1; i <= n原创 2012-03-26 10:55:59 · 343 阅读 · 0 评论 -
重做catch the cow
1.思路果然清晰了,十分钟搞定#include #include #include #include using namespace std;int n, k;queue q;int step[100010];int bfs(int a){ if(a == k) return step[k]; else {原创 2012-03-12 20:22:19 · 296 阅读 · 0 评论 -
HDUOJ Knight Moves解题报告
1.典型的bfs。2.难点在剪枝部分。有一个记录所走step的数组,记录到每个点所走的步数,如果一个点没走过,放进队列中,如果一个点走过,比较原来这个点的step值和由当前点计算的值,如果大,另其等于当前点的step值+1;3.这道题犯了超级低级的错误。。。写好了bfs()函数,结果在main()函数中没有添加bfs();语句,导致调试了好久得不到想要的结果。。。#in原创 2012-03-12 20:20:23 · 389 阅读 · 0 评论 -
POJ 1057 FILE MAPPING
1. 这道题根本不会做,直接看的别人的解体报告,看了别人的解题报告的算法说明,还是不会做,只好看代码了;2. 这篇博客写得比我写得好(http://jovesky.info/blog/2011/08/12/poj-1057-file-mapping-c-edition/),我就是看人家的看懂的;3. 递归+vector,一层套一层,以后还得看看怎么做的。现在思路会了,但是vector还是不原创 2012-03-28 16:52:04 · 1122 阅读 · 0 评论 -
POJ 1050 To the Max
1. 根本没有思路,看到如下的解释,才明白怎么做: 这个题目很经典的说,O(N^3)的DP。首先偶们考察这样的题目,简化版:已知一列数,求任意连续若干个数和的最大值。SAMPLE: 3 2 -6 2 -1 7原数3 2 -6 2 -1 7 处理3 5 -1 2原创 2012-03-28 15:31:40 · 287 阅读 · 0 评论 -
POJ 1059 Chutes and Ladders
1. 一下午就做了这么一道题,蛋疼的模拟题。刚开始没有考虑当超过100的时候怎么处理,一直WA,上网看解题报告才知道。。。2. memset()函数的用法。只能初始化为0或者-1。当初始值为其他数时,是在每一位上是这个数(这句话没明白),记住只能把数组初始化为0或者-1就行了;3. 此题属于模拟题,不得不说,模拟题的if语句就是多啊;#include #include us原创 2012-03-27 16:56:25 · 810 阅读 · 0 评论 -
Poj 1045 Bode Plot
1.物理题,不会求解。。。参考(http://blog.csdn.net/uestcshe/article/details/5621292)推出的公式,直接算出结果的;2. 第一次使用iostream输出有要求的小数。原来在书上看到的cout#include #include using namespace std;int main(){ double V原创 2012-03-26 19:25:06 · 507 阅读 · 0 评论 -
POJ 1006 Biorhythms
1.题目的大意是给定三个数a1, a2, a3,求出一个数,这个数除以23, 28, 33得到的余数为a1, a2, a3;2.从网上查到用中国余数定理,以下是找到的资料:若某数x分别被d1、、…、dn除得的余数为r1、r2、…、rn,则可表示为下式:x=R1r1+R2r2+…+Rnrn+RD其中R1是d2、d3、…、dn的公倍数,而且被d1除,余数为1;R1 、R2…原创 2012-03-26 13:24:39 · 362 阅读 · 0 评论