上一页 1 ··· 19 20 21 22 23 24 25 26 27 ··· 30 下一页
摘要: /*機器手臂有以下幾種合法搬積木的方式(a和b是積木的編號):move a onto b在將a搬到b上之前,先將a和b上的積木放回原來的位置(例如:1就放回1的最開始位罝)move a over b在將a搬到b所在的那堆積木之上之前,先將a上的積木放回原來的位罝(b所在的那堆積木不動)pile a onto b將a本身和其上的積木一起放到b上,在搬之前b上方的積木放回原位pile a over b將a本身和其上的積木一起搬到到b所在的那堆積木之上quit動作結束*/#include <iostream>#include <cstring>#include <str 阅读全文
posted @ 2012-03-23 21:01 yejinru 阅读(215) 评论(0) 推荐(0) 编辑
摘要: //ACM ICPC Central European Regional 1997/*简单的栈的应用,可惜WA了好几次poj上要把最后的while后的cout<<endl;去掉*/#include <iostream>#include <stack>#include <cstdio>using namespace std;const int X = 1005;int a[X],b[X];int main(){ freopen("sum.in","r",stdin); freopen("sum.ou 阅读全文
posted @ 2012-03-23 19:15 yejinru 阅读(251) 评论(0) 推荐(0) 编辑
摘要: /*(x1,y2) ____________ (x2,y2) | | | | | | |____________|(x1,y1) (x2,y1)在上面的矩形中,本题用树状数组来计算的,所以sum(x2,y2)计算的是它的左下方所有的手机用户数,但是它多算了sum(x2,y1)以下的以及sum(x1,y2)以下的,若减掉即ans = sum(x2,y2) - sum(x2,y1) -sum(x1,y2)的话,又减多了sum(x1,y1)部分,那只好加上这一部分了。另外,在update(),sum()时,无非算多了一维,很容易理解的,具体看代码,新学到了 i -... 阅读全文
posted @ 2012-03-22 21:11 yejinru 阅读(227) 评论(0) 推荐(0) 编辑
摘要: /*晕,弄少了九位数的那段据说偶数位的话,除了11是回文素数以外,其他均可被11整除并且是合数,然后就枚举1位3位5位7位9位数的数,然后判断是否为素数即可*/#include <iostream>#include <cmath>using namespace std;long long a,b;bool judge(long long x){ for(int i=2;i<=(int)sqrt(x*1.0);i++) if(x%i==0) return false; return true;}void solve(){ long long ans; if(a< 阅读全文
posted @ 2012-03-22 19:39 yejinru 阅读(349) 评论(0) 推荐(0) 编辑
摘要: /*题目: 是说学生0怀疑有SARS病,跟他接触过的俱乐部的所有人以及他接触过的人再与别人接触, 都有可能有SARS病,要你求出给出的所有俱乐部人的名单,要你求出所有的嫌疑犯。。。分析: 用并查集的方法做,具体实现是先定义n个森林,然后再把同一的人所在的森林合并在一起, 而并查集的改善方法有两种,我的使用的是压缩路径的方法*/#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int X = 30010;int parent[X],a[X],Rank[ 阅读全文
posted @ 2012-03-22 18:13 yejinru 阅读(235) 评论(0) 推荐(0) 编辑
摘要: /*题目: 给出n个商店,每个商店有初始化的商品数量,现在有两种指令: 0 x y 连锁店x的商品数量变化值为y,y > 0商品数量增加, y < 0减少 1 i j 输出编号在[i,j]区间内的连锁店中商品数量为素数的有多少家 当指令为1时,求给出 i到j的商品数量为素数的商店的数目分析: 用树状数组做,只不过在update()处改动一下,并且注意到有可能改动完后和改动前 均为素数的情况,所以用visit[]数组记录此前是否为素数,另外需要注意的是当初始 化时即为奇数的话,当时就要初始化数组c[]以及visit[]数组*/#include <iostream>#inc 阅读全文
posted @ 2012-03-22 15:14 yejinru 阅读(280) 评论(0) 推荐(0) 编辑
摘要: /*哈弗曼编码,比如权值为 a:1 b:1 c:2 d:3 e:5 f:6 的树 1.开始时由最小的两个数 a:1 b:1组成一棵树 2.接着由新的最小的两个数 2 c:2 d:3 e:5 f:6 中的 2 c:2组成新的树 3.接着由最小的两个数 4 d:3 组成新的树 4.接着由最小的两个数 e:5 f:6 组成一棵树 5.接着由最小的两个数 7 11 组成一棵树(最终形成) 6.算最小的编码总长:= 18 + 7 + 11 + 4 + 2 = 42 2 4 7 11 18 / \ / \ / \ / \ / \ a b2 c 4 de f 7 11 / \ / \/ \ /... 阅读全文
posted @ 2012-03-21 19:04 yejinru 阅读(173) 评论(0) 推荐(1) 编辑
摘要: 编辑器加载中.../*题目: 问能否组成一棵树分析: 注意到该树为有向树,入度不能大于一,同时所有节点都应该能指向根, 可以用并查集查找是否有共同的根,有的话就不是树了,注意此时应该 要判断是否有两个入度,就不能用压缩路径的并查集,并且只能把出度 的点付给入度的点的并查集数组(不知道我自己理解是否有错。。。), 最后要判断是不是森林,可以用第一个点来检验与后面所有的节点是否 有交集,只要有一个没有的话,就是森林而不是树 (空树也是树。。。) 从poj中的discuss中找到 1: 0 0 空树是一棵树 2: 1 1 0 0 不是树 不能自己指向自己 3: 1 2 1 2 0 0 不是树.... 阅读全文
posted @ 2012-03-20 21:15 yejinru 阅读(168) 评论(0) 推荐(0) 编辑
摘要: /*分析: 由于有些物品存在多个,可以用数组逐一保存下,然后用01背包问题求解, 但是这样太耗时间,会造成time limitted,可以用二进制形式保存拥有多个 的物品,这样可以考虑完全并且比较省时间*/#include <iostream>#include <cstdio>#include <cstring>using namespace std;#define X 100005int dp[X],cash[X];int main(){ freopen("poj1276.in","r",stdin); freope 阅读全文
posted @ 2012-03-20 14:45 yejinru 阅读(188) 评论(0) 推荐(0) 编辑
摘要: //这题用高精度乘法算#include <iostream>#include <cstring>using namespace std;#define X 140void multiply(int num[],int a[],int m) //高精度乘法运算{ int s[X]; memset(s,0,sizeof(s)); int i,j; for(j=0;j<m;j++) for(i=0;i<126;i++) s[i+j] += num[i]*a[j]; //核心算法,把乘完的结果保存到数组s[]中 int carry = 0; //表进位 for(i= 阅读全文
posted @ 2012-03-20 14:42 yejinru 阅读(237) 评论(0) 推荐(0) 编辑
上一页 1 ··· 19 20 21 22 23 24 25 26 27 ··· 30 下一页