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) 编辑

导航