上一页 1 2 3 4 5 6 7 ··· 57 下一页

2012年3月14日

poj 2418 Hardwood Species

摘要: map// 题意:给出不同的树,求每种树所占的比例,并要求树名按字典序由小到大输出#include <iostream>#include <string>#include <map>using namespace std;int main(){ map<string,int> col; char str[100]; double tot=0; while(gets(str)) { col[str]++; tot+=1; } for(map<string,int>::iterator ite=col.begin();ite!=... 阅读全文

posted @ 2012-03-14 22:36 sysu_mjc 阅读(157) 评论(0) 推荐(0) 编辑

poj 1521 Entropy

摘要: /* 题意:给出一个字符串,默认每个字符用8位二进制数(ASCII编码)表示, 求以前缀不重复编码压缩后表示字符串所需的最少二进制数位数。 其实就是Huffman编码的思路,只需要构建出一颗哈夫曼树,然后计算原字符串节点的带权路径长度即可。 构建哈夫曼树的算法是: 首先把 n 个叶子结点看做 n 棵树(仅有一个结点的二叉树),把它们看做一个森林。 在森林中把权值最小和次小的两棵树合并成一棵树,该树根结点的权值是两棵子树权值之和。 这时森林中还有 n-1 棵树。重复直到森林中只有一棵为止。此树就是哈夫曼树 */#include <iostream> // Huffman树#inc.. 阅读全文

posted @ 2012-03-14 21:48 sysu_mjc 阅读(267) 评论(0) 推荐(0) 编辑

poj 2442 Sequence

摘要: // 题意:有 m个序列,每个序列 n个元素,从每个序列中选择一个元素组成一个数并计算和,// 总共有 n^m 个和,输出最小的 n个和// 思路:用STL的堆解决,将第一个序列读入arr1中,升序排序;将第二个序列读入arr2中,升序排序// 将arr2[0]+arr1[0...n]读入heap,之后建大顶堆 make_heap(heap,heap+n);// 其后,对于i=1...n-1,将t=arr2[i]+arr1[0...n]与堆顶作比较,若小于堆顶,则删除原堆顶结点,并将t压入,否则退出// 把heap复制到arr1数组并排序,这样arr1 就保存着当前最小的n个和.再继续以上过程 阅读全文

posted @ 2012-03-14 14:39 sysu_mjc 阅读(300) 评论(0) 推荐(0) 编辑

poj 3253 Fence Repair

摘要: // 题意: 要把一块木板锯成几块给定长度的小木板,每次锯木板的长度之和就是总费用,求最小费用// 思路:反过来思考,相当于合并n条木板,每次合并后的长度就是所需的花费,// 所以每次只要取最小长度的两块木板合并,直到将所有木板合并成一块为止// 是哈夫曼树的套路,不过也可以用优先队列解决#include<iostream> // 优先队列#include<queue>using namespace std;const int maxn=50100;priority_queue<int,vector<int>,greater<int> &g 阅读全文

posted @ 2012-03-14 10:56 sysu_mjc 阅读(139) 评论(0) 推荐(0) 编辑

poj 1442 Black Box

摘要: /* 题意:向一个容器中不断的添加m个数,然后有n个查询, 每次查询在插入的前u个数中第i个小的数,i初始值是1,每查询一次就自增1 sample: 7 4 3 1 -4 2 8 -1000 2 1 2 6 6 第1次查询:u=1,即插入 3 , 第1 小的数是 3 第2次查询:u=2,即插入 3 1, 第2 小的数是 3 第3次查询:u=6,即插入 3 1 -4 2 8 -1000, 第3 小的数是 1 第3次查询:u=6,即插入 3 1 -4 2 8 -1000, 第4 小的数是 2 所以输出为: 3 3 1 2 思路:... 阅读全文

posted @ 2012-03-14 10:05 sysu_mjc 阅读(139) 评论(0) 推荐(0) 编辑

2012年3月13日

poj 2051 Argus

摘要: // 题意: 给出一些查询口令,每个命令有一个编号和一个周期,输出前k个执行的命令的编号.// sample里要求输出前5个执行的命令的编号,那么前5个执行的时间分别为// 时间点:200(编号:2004), 300(2005), 400(2004), 600(2004), 600(2005)// 两个命令都能达到600这个时间点,但根据题意先输出编号小的,即先输出2004#include<iostream> //优先队列#include<string>#include<queue>using namespace std;struct Node{ int p 阅读全文

posted @ 2012-03-13 23:56 sysu_mjc 阅读(132) 评论(0) 推荐(0) 编辑

poj 3903 Stock Exchange

摘要: #include<iostream> //最长严格上升子序列(LIS)算法,时间复杂度为O(nlogn)using namespace std;int seq[100010]; //seq[i]是记录在所有最长严格上升子序列的长度为 i 之中,选取结束位置上最小的值int main(){ int n,p; while(cin>>n) { cin>>p; int rear=0; seq[++rear]=p; while(--n) { cin>>p; ... 阅读全文

posted @ 2012-03-13 10:02 sysu_mjc 阅读(151) 评论(0) 推荐(0) 编辑

2012年3月10日

poj 3185 The Water Bowls

摘要: // 题意:有20个只有0和1的数字,如果改变(取反)第i个数字,则相邻的两个数也会跟着改变。// 求使得这20个数字全部变为0的最少步骤#include <iostream> //BFSusing namespace std;const int MAXN=1<<20;int q[MAXN],dis[MAXN],vis[MAXN];void bfs(int x){ q[0]=x; dis[0]=0; vis[x]=1; int u,front,rear; front=0;rear=1; while(front<rear) { ... 阅读全文

posted @ 2012-03-10 17:11 sysu_mjc 阅读(135) 评论(0) 推荐(0) 编辑

2012年3月9日

poj 1995 Raising Modulo Numbers

摘要: //题意:计算(A1^B1+A2^B2+ ... +AH^BH)mod M.#include <iostream> //快速幂取模#include <stdio.h>using namespace std;int power(int a,int b,int m) //快速幂取模计算 (a^b)%m{ if(a==0) return 0; else if(b==0) return 1; int r=a%m,k=1; //中间运算过程(k*r,r*r)不会超int范围,m<=45000,m*m<INT_MAX while... 阅读全文

posted @ 2012-03-09 11:31 sysu_mjc 阅读(139) 评论(0) 推荐(0) 编辑

2012年3月3日

sicily 1500. Prime Gap

摘要: #include <iostream>#include <stdio.h>#include <string.h>using namespace std;#define maxn 1299800int isPrime[maxn],prime[100020],cnt;void make_prime() //线性筛素数{ fill(isPrime,isPrime+maxn,1); cnt=0; for(int i=2;i<=maxn;++i) { if(isPrime[i]) prime[cnt++]=i; for(in... 阅读全文

posted @ 2012-03-03 01:29 sysu_mjc 阅读(219) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 5 6 7 ··· 57 下一页

导航