上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 21 下一页
摘要: 对与知道并查集的人来说这题太水了,裸的并查集,如果你要给别人讲述并查集可以使用这个题当做例题,代码中我使用了路径压缩,还是有一定优化作用的。#include #include const int maxn = 500005;int n, m;int pa[maxn];void init(){ for (int i = 1; i <= n; i++) { pa[i] = i; }}int find(int x){ if (x == pa[x]) return x; return pa[x] = find(pa[x]); //路径压缩,... 阅读全文
posted @ 2013-10-30 16:41 xindoo 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 输入若干组对应关系,然后输入应该单词,输出对应的单词,如果没有对应的输出eh此题的做法非常多,很多人用了字典树,还有有用hash的,也有用了排序加二分的(感觉这种方法时间效率最差了),这里我参考了MSDN中stl,使用了map,map是基于红黑树的,查询和插入的时间复杂度都是log(n),如果你构造了一个好的哈希函数的或也可以把时间复制度降到很低。字典树应该是最快的方法了,不过结构相对来说比较复杂,代码不大容易编写(对我而言)。以下只给出我写的使用map的代码#include #include #include #include using namespace std;map m;string 阅读全文
posted @ 2013-10-30 15:59 xindoo 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 题目就是找n个字符串的最长公共字串,如果有多个就输出字典序最小的一个。我的思路就是枚举所有的字串,然后用KMP挨个字符串匹配。#include #include char str[20][70];char tmp[70];char ans[70];int f[70];int n;void getfail(char *s){ int m = strlen(s); f[0] = 0; f[1] = 0; for (int i = 1; i = 1; i--) { for (int j = 0; j 0) ... 阅读全文
posted @ 2013-10-23 17:17 xindoo 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 题意很简单就不说了。解题的关键就是这个公式answer=n/(m^(n-1));要用到大数的乘法。然后java水过。import java.util.*;import java.math.*;public class Main { public static BigInteger gcd (BigInteger a, BigInteger b) { if (a.mod(b).equals(BigInteger.valueOf(0))) return b; return gcd(b, a.mod(b)); } public static void main(String[] args) ... 阅读全文
posted @ 2013-10-22 19:52 xindoo 阅读(141) 评论(0) 推荐(0) 编辑
摘要: tar-c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。-z:有gzip属性的-j:有bz2属性的-Z:有compress属性的-v:显示所有过程-O:将文件解开到标准输出下面的参数-f是必须的-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。# tar -cf all.tar *.jpg这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。# t 阅读全文
posted @ 2013-10-22 10:09 xindoo 阅读(278) 评论(0) 推荐(0) 编辑
摘要: 参考自《编程之美》169页,大概原理就是把区间分成两部分,然后递归找每一部分中最近的点对,还有一种情况就是这个点对分属于这两部分,然后选两部分中的部分点枚举即可,取其最小值。//2013-10-21-17.18#include #include #include #include const double INF=1e100;using namespace std;struct node{ double x, y; bool flag;}p[200005], tmp[200005];bool cmpx(node a, node b){ return a.x >1; rs... 阅读全文
posted @ 2013-10-21 18:13 xindoo 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 题意就是有个4*4的棋盘,上面有黑白两面的棋子,然后你可以选一个点,翻转这个点及他上下左右的棋子(如果有的话),求最小步数可以翻成全白或全黑,如果无法成功输出impossible。 如果是最少步数的话应该用到广搜,因为一个棋子只有正反两面,所以可以用二进制的形式存储棋盘的状态,参考了某大牛的代码,没有明显的用到DFS,但和DFS的效果是一样的,而且这样也使得代码变短了好多。//poj 1753//2013-10-16-21.35#include int ans;int cnt;void search(int x, int sta, int cnt){ if (sta == 65535... 阅读全文
posted @ 2013-10-16 21:45 xindoo 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 初期:一.基本算法: (1)枚举. (poj1753解题报告,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. (5)构造法.(poj3295) (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法: (1)图的深度优先遍历和广度优先遍历. (2)最短路径算法(dijkstra,bellman-ford,floyd,heap+dijkstra) (poj1860,poj3259,poj1062,poj2253,poj1125,poj2240) (3)最... 阅读全文
posted @ 2013-10-16 15:02 xindoo 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 题意就是找出一个长度为k的整数,使得它的root为d,k的可能取值为1-1000。第一眼看到这个题,无从下手,想到那么长的数,暴力肯定超时。其实不然,题目要求只要输出任何一个满足条件的即可,因为任何数的root都是0-9,所以这样的数还是很多的,算一下枚举次数的期望,大概就是5,不知道算的对不对。//cf 355A//2013-10-15-10.48#include #include int num[1005];int k, d;int tot;int getroot(int x){ if (x 1) { puts("No solution"); ... 阅读全文
posted @ 2013-10-15 10:56 xindoo 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 虽然linux下不会有windows下的那么多垃圾和磁盘碎片!但还是会留下一些用不着的临时文件或是多次升级后的N个旧的内核!1,非常有用的清理命令:sudo apt-get autocleansudo apt-get cleansudo apt-get autoremove这三个命令主要清理升级缓存以及无用包的。2,清理opera firefox的缓存文件:ls ~/.opera/cache4ls ~/.mozilla/firefox/*.default/Cache3,清理Linux下孤立的包:图形界面下我们可以用:gtkorphansudo apt-get install gtkorphan 阅读全文
posted @ 2013-10-05 07:45 xindoo 阅读(227) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 21 下一页