- 博客(65)
- 资源 (5)
- 收藏
- 关注
原创 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 457
原创 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 373
转载 【转】素数相关算法总结
定义:除了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 369
原创 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 422
原创 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 484
原创 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 416
原创 整理在ubuntu重装之后配置过程(6G内存,修改网卡物理地址,修改hosts,codeblocks,eclipse,jdk,配置eclipse编译python)
1. 识别6G内存由于现在电脑是6G内存,所以需要用apt内核来识别,在新立得软件包里搜索linux-image,找到linux-image-apt,安装即可。有命令行形式,第一次可以,第二次重装之后就会出错,所以这里还是不记下来了。2. 修改网卡物理地址 可以在网络连接,eth0->编辑->克隆地址里填入你要改到物理地址,然后把上边到一行删掉3. 修改hos
2012-05-22 20:37:32 1468
原创 邻接表建图方法及代码
图论这块挺不好理解的,建图+最短路,代码不容易理解,尤其是建图过程。以下是转的写的很好地一篇博文,图文并茂:邻接表建图法1极大的节省了空间和时间 是建图非常棒的一种方式它利用数组模拟出边与边之间的关系 图示解析(数据为代码中的测试数据):#include #define Maxn 200 using namespace std; str
2012-05-09 15:18:25 1808 1
原创 USACO section 1.5.4 Checker Challenge
1. 第一次做位运算的题,参考了这段经典代码(n皇后问题):void Queen(int row, int ld, int rd){ int pos, p; int upperlim = (1 << n) - 1; if (row != upperlim) { pos = upperlim & ~(row | ld | rd);
2012-04-24 16:24:46 418
原创 USACO section 1.5.3 SuperPrime Rib
1.从数学的角度: 1.首位只能是质数2 3 5 72.其余位只能是1,3,7,93.若n=1,直接输出2,3,5 7直接DFS 1~9,加入当前数末尾,并判断是不是素数,是则递归处理下一位数,不是则回溯,直到depth>n。不会超时。2. 这道题折磨了我好久,一直出现Execution error: Your program (`sprime') exited with
2012-04-24 16:19:12 454
原创 USACO section 1.5.2 Prime Palindromes
1. 无数遍TLE的题,快疯了,最后没办法,只能看别人的代码,最好的一个代码,写了下来,但是还有一点地方不太明白,这是一种新的方法,以下是代码/*ID: dollar4PROG: pprimeLANG: C++*/#include #include #include #include #include using namespace std;int modify
2012-04-21 21:56:03 512
原创 USACO section 1.5.1 Number Triangles
1. 动态规划,f[i,j]=Max{f[i+1,j],f[i+1,j+1]}+a[i,j] (12. 以下是代码:/*ID: dollar4PROG: numtriLANG: C++*/#include #include #include #include #include using namespace std;long long num[1010][101
2012-04-17 17:26:56 398
原创 USACO section 1.4.4 Mother's Milk
1. 用dfs,[A][B][C]为三个状态,且只有6个操作,a倒b,a倒c,b倒a,b倒c,c倒a,c倒b。知道用深搜了,但是还是不知道怎么写,看了别人的代码,才会写dfs()这个函数了。其实确定深搜了之后,写这个函数的时候,不需要考虑递归是怎么进行的,只需要考虑这次和下一次的操作过程即可。2. 以下是代码:/*ID: dollar4PROG: milk3LANG: C++*
2012-04-15 14:42:06 445
原创 USACO section 1.4.3 Arithmetic Progressions
1. 枚举可以算出来,但是肯定超时,所以要剪枝,以等差数列a+nb说明;2. 几个可以剪枝的地方:b的范围是从1~2*m*m/(n-1); a的范围是0~2*m*m - (n-1) * b然后循环判断是不是pq了剪枝不是很充分,但是最慢3秒多给过了,哈哈3.以下是代码:/*ID: dollar4PROG: ariprogLANG: C++*/#inclu
2012-04-14 23:04:34 539
原创 USACO section 1.4.2 The Clocks
1. 这道题有好多种解法,看NOCOW,用枚举,DFS,BFS都能求解。我看到这个题的时候,连最基本的枚举怎么做都想不出来,差距呐。。。;2. 我挑选了解题报告中代码最短的读懂然后写出来了:/*ID: dollar4PROG: clocksLANG: C++*/#include #include #include #include #include #include
2012-04-13 21:56:03 666
原创 USACO section1.4.1
1.因为只有4个方块,所以枚举每个方块的选择顺序和放置方向(横放还是纵放),放置方式只有题目给出的6中基本模式,分别算出不同模式下最小的面积,更新最优解。第4、5个在本质上其实是一样。如图,不同模式对应的最小面积如下:设w1,w2,w3,w4表示4个方块的横长,h1,h2,h3,h4表示4个方块的纵长。w,h表示最小。1:w=w1+w2+w3+w4;h=ma
2012-04-13 16:19:50 416
原创 USACO section 1.3.4 Prime Cryptarithm
1. 枚举,注意里边的几个剪枝,标在代码中了2. 我的代码:/*ID: dollar4PROG: crypt1LANG: C++*/#include #include #include #include #include using namespace std;int num[10], n;bool cmp(int a, int b){ return
2012-04-11 23:42:49 329
原创 USACO section 1.3.3
1. 输入带回车符,空格,标点符号的字符串:while (fin >> temp) { str += temp; str += " "; }unsigned int len = str.size();str.resize(len - 1);2. 判断是不是回文3. 以下是代码:/*ID: dollar41PROG:
2012-04-11 22:34:23 398
原创 USACO section1.3.2 Barn Repair
1. 这道题想多了,想得很复杂,其实就是把输入的一排数按照从小到大的顺序排列,然后得到相邻两个数之间的差,按从大到小的顺序排序,用这个数组所有元素的和减去前m-1个数,然后再加上m,就得到结果2. 以下是我的代码:/*ID: dollar4PROG: barn1LANG: C++*/#include #include #include #include #includ
2012-04-11 16:26:14 314
原创 USACO section 1.3.1 Mixing Milk
1. 贪心,其他没啥说的2. 我的代码:/*ID: dollar4PROG: milkLANG: C++*/#include #include #include #include #include using namespace std;struct Node{ int price; int num;} node[5000];bool cm
2012-04-11 10:25:45 342
原创 USACO section 1.2.4 Dual Palindromes
1. 直接用了上道题的函数,另外,进制转换:string trans(int a){ string str1 = ""; int tmp; while (a) { tmp = a % base; if (tmp < 10) str1 += tmp + '0'; else
2012-04-11 10:17:27 358
原创 USACA section 1.2.3 Palindromic Squares
1. 进制转换+回文判断+int与char之间相互转换;以下是代码: /*ID: dollar4PROG: palsquareLANG: C++*/#include #include #include #include #include using namespace std;int base;bool checkp(string str){ int
2012-04-09 19:37:02 433
原创 USACO section 1.2.3 Name That Number
1. 比较简单,但是用到了文件读写,终于明白了给的test代码中的fout和fin是什么意思了,哈哈;2. 如果按照一般的思路,肯定会超时,所以把dict转换成数字,这样的算法效率是固定的以下是代码:/*ID: dollar4PROG: namenumLANG: C++*/#include #include #include #include #inclu
2012-04-09 16:44:02 398
原创 USACO section 1.2.2 Transformations
1. 被这道题虐了无数次,每次编译通过,但是运行会错误(当时用的是string数组), 后来把string数组改成char[][]二维数组就好了;2. 给的参考代码是不对的3. 如果函数的返回类型是数组,只能通过指针来实现,但是参考代码给了一种巧妙的方法,把数组封装成结构体,然后返回结构体以下是我的代码:/*ID: dollar4PROG: transformLANG: C+
2012-04-09 13:59:42 276
原创 USACO section 1.2.1 Milking Cows
1. 算法:把所有的时间按照开始的时间从小到大排序,然后设当前cur为目前的至少有一个工作的时间段,判断下一个时间段是跟这个时间段交叉还是包含在这个时间段之内还是在这个时间段之外,根据这三种不同过的情况,分别得到答案。值得注意的是,最后要得到cur的时间段的值,因为前边的循环当中,没有判断跟这个时间段比较的情况。以下是代码:/*ID: dollar4PROG: milk2LA
2012-04-08 16:49:33 398
原创 USACO Broken Necklace
1. 算法:从一个节点开始,假如是r,如果下一个是r或者w,继续,一直到下一个为b为止,然后从b开始看下一个,如果是b或者w,继续,如果是r停止,处理“环”的问题,用了求余,可以使结尾的下一个变成第一个,但是要注意,最后结果不能大于n。2. 这是O(n^2) 的复杂度吧。/*ID: dollarzhaolePROG: beadsLANG: C++*/#include
2012-04-05 20:39:58 350
原创 USACO Friday the Thirteenth
1. 蔡勒公式:来自百度百科w:星期; w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六 c:世纪(前两位数) y:年(后两位数) m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算)
2012-04-05 17:14:03 568
原创 USASO Greedy Gift Givers
1. 文件输入输出好别扭;2. 第一次没注意到cas--之后for循环就没作用了,得不到结果。/*ID: dollarzhaolePROG: gift1LANG: C++*/#include #include #include using namespace std;struct Node{ string name; int sendp;//
2012-04-05 15:31:04 378
原创 USACO Your Ride Is Here
1. 从今天开始做USACO了,系统的学习下;2. 有详细的解题报告,可以看人家的代码,使自己的代码更简洁,更规范。/*ID: dollar4PROG: rideLANG: C++*/#include #include #include using namespace std;long getnum(string str){ long num =
2012-04-05 13:18:27 337
原创 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 442
原创 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 676
原创 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 349
原创 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 304
原创 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 328
原创 看《c++ primer》的过程中原来没遇到的内容的总结(会慢慢添加的)
1. 指针可以操作数组元素#include using namespace std;int main(){ int a[5] = {1, 2, 3, 4, 5}; int *p = &a[2]; cout << p[1] << ' ' << p[-2] << endl;}2.
2012-03-29 11:12:58 320
原创 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 1128
原创 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 294
原创 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 815
原创 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 637
原创 POJ 1068 Parencodings
1. 好久没碰到这种难度的题了:看题没思路,经过思考,推算,一次AC。以前的题要不太难,只能看解题报告,要不太简单,不用思考,这种难度的题正好适合我;2. 具体思路是通过P序列还原成括号序列,然后通过括号序列得到W序列的值。注意map[ p[ i ] + i] = ‘)’。通过flag数组标记“)”之前的没有匹配的左括号;3. 这道题属于模拟题(以后知道题的类型就分个类);#
2012-03-26 20:48:49 326
列车运行两阶段仿真研究
2011-09-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人