摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2066用dijistra:不同一般的题目,这个题目是多个起点 多个终点的;对不同起点 求最短路,求出不同终点的最小值;#include #include #include #define maxn 1003 #define INF 0x3f3f3f3f using namespace std; int T,S,D; int map[maxn][maxn]; //地图 bool visit[maxn]; //访问标记 int dis[maxn]; //到起点 距离 int ... 阅读全文
posted @ 2013-07-13 13:51 简洁是智慧的灵魂 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 题目输入 -999999 - 999999将负数变为正数,并且在num中标记为负数(true)从后往前取,一正一负(一负一正)UVA 11039#include #include #include #include #include #include using namespace std; #define maxn 1000000 int arr[maxn]; bool num[maxn]; int main() { int T,N,a; scanf("%d",&T); while(T--) { memset(num,false,sizeof(num)); sc. 阅读全文
posted @ 2013-07-11 19:06 简洁是智慧的灵魂 阅读(105) 评论(0) 推荐(0) 编辑
摘要: HDU 1713 gcd应用思路:分数的“最小公倍数” 以例子来说: 26501/6335 18468/42 其实这两个值就是 每圈需要多少天; 如果两个数 / 之后得到的结果是整数就好办了; 就是求他们的最小公倍数; 但是,其实分数也能求最小公倍数: 根据欧几里德定理: gcd(k*a,k*b) = k*gcd(a,b); so....gcd(a,b) = gcd(k*a,k*b)/k; 我们来设置几个变量,a1,a2,b1,b2; 分别代表第一个数的分子分母 和第二个数的。。。 设d 为最小公倍数: d = gcd(a1/a2 , b1/b2) ... 阅读全文
posted @ 2013-05-13 21:54 简洁是智慧的灵魂 阅读(142) 评论(0) 推荐(0) 编辑
摘要: (1)扩展欧几里德:gcd(a,b)=gcd(b,a mod b)证明:a可以表示成a = kb + r,则r = a mod b假设d是a,b的一个公约数,则有d|a, d|b,而r = a - kb,因此d|r因此d是(b,a mod b)的公约数假设d 是(b,a mod b)的公约数,则d | b , d |r ,但是a = kb +r因此d也是(a,b)的公约数因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证(2)stein算法:由J. Stein 1961年提出的Stein算法很好的解决了欧几里德算法中的这个缺陷,Stein算法只有整数的移位和加 阅读全文
posted @ 2013-05-13 20:26 简洁是智慧的灵魂 阅读(407) 评论(0) 推荐(0) 编辑
摘要: 1.2.6 find your present(2)hdu 2095用位运算 ^ => 1^3^7^3^1 = 7#include using namespace std; int main() { int n,s,a; while(scanf("%d",&n)&&n) { s = 0; while(n--) { cin>>a; s ^= a; } cout using namespace std; int main() { in... 阅读全文
posted @ 2013-05-12 15:54 简洁是智慧的灵魂 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 通过在网上查找,整理的:#include using namespace std; bool is_pow2(int x) //判断是否2的n次方 { x &= x-1; if(!x) return true; return false; } void Binary(int num)//十进制转二进制 { int a[32]; int i = 0; while(num) { a[i++] = (num%2)?1:0; num >>= 1; } while(--i) { cout>x; coutusingstd::cout;usingstd::cin;u... 阅读全文
posted @ 2013-05-12 00:46 简洁是智慧的灵魂 阅读(1379) 评论(0) 推荐(0) 编辑
摘要: 初次使用优先队列;有的人用普通队列也能过,但是,我只能说,那是数据太水了;普通队列能过的将类似下面两句改改顺序:int xx[4] = {1,-1,0,0};int yy[4] = {0,0,1,-1};也许就过不了了;因为如果用普通方法,最后得到的是最优步数,而不是最优时间;来自Jason的解释:普通队列+bfs确实是蒙对的,因为击败守卫需要消耗时间1,因此普通队列每一次出队列的元素只是步数上最优,但不一定是时间上最优的,这时即使我们把整个迷宫搜完以最小值作为最优依然不行,因为每一步处理完成都会把该状态标记为已处理vis[i][j]=1,因此,只要有一步不是最优,就会影响后面的结果。这题的正 阅读全文
posted @ 2013-05-07 21:04 简洁是智慧的灵魂 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 转载自C/C++程序员之家本文原始链接地址:STL中优先队列的使用队列的特点是先进先出。通常都把队列比喻成排队买东西,大家都很守秩序,先排队的人就先买东西。但是优先队列有所不同,它不遵循先进先出的规则,而是根据队列中元素的优先权,优先权最大的先被取出。通常把优先队列比喻成现实生活中的打印。一个打印店里有很多打印机,每台机器的性能不一样,有的打印机打印很快,有的打印机打印速度很慢。当这些打印机陆陆续续打印完自己的任务时进入排队等候状态。如果我这个时候要打印一份文件,我选的不是第一个排队的打印机,而是性能最好,打印最快的打印机。重点:优先级队列,是要看优先级的,谁的优先级更高,谁就先得到权限。不分 阅读全文
posted @ 2013-05-07 20:40 简洁是智慧的灵魂 阅读(1121) 评论(0) 推荐(0) 编辑
摘要: BFS:起点入队;开始搜索:读取队首并出队,搜索范围有四周八个点(有的不存在),搜索到的点入队,并将歩长+1;直到读取的点等于终点;15MS372Kcode:#include #include #include #include using namespace std; struct point { int x; int y; int step; }st,ed; int x1,y1,x2,y2; bool visit[10][10]; int xx[8] = {1,2,1,2,-1,-2,-1,-2}; int yy[8] = {2,1,-2,-1,2,1,-2,-1}; v... 阅读全文
posted @ 2013-05-06 22:35 简洁是智慧的灵魂 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 看下面一段程序#include int main() { double i; for(i = 0; i != 10; i += 0.1) printf("%.1lf\n", i); }你也许觉得这个程序很容易理解;但是请别相信自己的想象力,运行一下:什么无限输出下去??不是按到底到10的时候会停止吗?再看一段程序:#include #define exp 0.000001 int main() { if(0.1+0.1+0.1 == 0.3) printf("equal\n"); else printf("not equal\n"); 阅读全文
posted @ 2013-04-20 15:58 简洁是智慧的灵魂 阅读(262) 评论(0) 推荐(0) 编辑