HOJ 2778 CPU scheduling(STL 优先级队列+模拟)
摘要:题意:模拟CPU处理多个任务的过程。首先输入任务数n,然后下面n行每行对应一个任务的信息:任务id,到达CPU的时间,处理它所需要的时间,优先级。一个任务在处理过程中,如果有下一个任务到达并且该任务优先级高于正在处理的任务,则要中止当前任务,转而进行下个任务。若是两任务优先级相同,先执行先到达的任务。大致思想:用了两个优先级队列,一个用来存储用户的输入,另一个用来存储已经到达的,正在等待中的任务。还有一个timer记录时钟。详细的参见代码及注释。//用STL里的priority_queue存储,剩下的就是模拟了。。
#include <iostream>
#include <
阅读全文
posted @
2012-08-30 17:06
MicZ
阅读(221)
推荐(0)
关于优先级队列STL
摘要:STL之priority_queue【转】STL之priority_queue【转】STL之优先队列原本以为priority_queue很简单,才知道原来懂的只是最简单的形式。头文件:#include<queue>优先队列,也就是原来我们学过的堆,按照自己定义的优先级出队时。默认情况下底层是以Vector实现的heap。既然是队列,也就只有入队、出队、判空、大小的操作,并不具备查找功能。函数列表:empty() 如果优先队列为空,则返回真pop() 删除第一个元素push() 加入一个元素size() 返回优先队列中拥有的元素的个数top() 返回优先队列中有最高优先级的元素用途就
阅读全文
posted @
2012-08-28 16:30
MicZ
阅读(250)
推荐(0)
HOJ 1898 Babelfish(Trie树)
摘要:题意就是先输入一个字典: 目标字符串-----输入字符串然后输入一个字符串,在上面的对应关系中进行查找,如果有则输出目标字符串,没有则输出eh。如果不想超时的话,明显就要套字典树了。代码贴上来,留作模板。字典树还是挺简单易懂的嘛。。。#include <iostream>
#include <cstdio>
#include <cstring>
#include <memory.h> using namespace std; const int num_char=26; struct TrieNode
{ TrieNode* branch[num
阅读全文
posted @
2012-08-27 22:26
MicZ
阅读(117)
推荐(0)
HOJ 2064 Journey to Tibet (DP)
摘要:题目中要求只要两个村庄间的距离小于等于30就可以转移。而刚开始我以为这个人最多只能走30,转移的路超过30之后就不能再转移了。刚开始用的BFS,怎么写都超时。后来发现看错题了之后,果断换成了DFS,然后才AC。本来挺简单的一道,浪费了大半天的时间。。不过最后能过掉还是很开心的。。#include <iostream>
#include <cstdio>
#include <stack>
#include <memory.h>
using namespace std; struct Village
{ int x; int y; int monas
阅读全文
posted @
2012-08-24 16:53
MicZ
阅读(198)
推荐(0)
HOJ 1447 Compromise (DP)
摘要:是一道要记录公共子序列内容的DP。状态转移方程部分:for(int i=1; i<=len1; i++) { for(int j=1; j<=len2; j++) { if(!strcmp(str1[i],str2[j])) { f[i][j]=f[i-1][j-1]+1; } else { f...
阅读全文
posted @
2012-08-24 16:49
MicZ
阅读(176)
推荐(0)
HOJ 1456 Team Queue(用queue进行模拟)
摘要:这题用的是queue,还有用了map实现将不同的人分到若干组。queue里的元素还是queue,这样就能实现插队的功能了,直接在特定的queue后面push即可。这里还用了一个bool型的visit数组,用来记录这一个team中是否有人已经在队列里。如果有,直接在对应的queue后面push一个新member。如果没有,说明这个member是他们team里面第一个来排队的,直接把他push在队尾即可。总之,在排队的不是一个人,而一个team。#include <iostream>
#include<cstdio>
#include <map>
#includ
阅读全文
posted @
2012-08-24 16:32
MicZ
阅读(322)
推荐(0)
HOJ 3034 Mysterious (二分)
摘要:这道题比赛当时没做出来。后来听jingo讲了用二分,试了一下,过了。#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <memory.h>
#define M 1000001
using namespace std;
//对天数n进行二分
int menu[10001][51];
int days,dishes,budget; bool check(int mid
阅读全文
posted @
2012-08-24 16:20
MicZ
阅读(153)
推荐(0)
HOJ 2608 Assemble(二分)
摘要:用一个结构体保存每一个部件,包括quality,price,name,type.先按quality降序排序,注意排序的时候不要将同类的部件打散,要保证同一类部件连在一起。再用componets数组,记录从i到j是哪一个部件。如componets[i]=0,componets[i+1]=3,则知第0到第2条记录是属于部件i的。然后关于质量进行二分。质量的范围取所有部件的质量最大、最小值。若在所有部件类型中,都能满足大于等于这个质量,并且花费不超过budget的,return true,然后调高mid,再进行判断。最后获得一个尽可能高的最低质量。否则return false。调低mid。总之,还是
阅读全文
posted @
2012-08-24 16:08
MicZ
阅读(207)
推荐(0)
HOJ 2278 IP Filtering (二分)
摘要:HOJ 2278主要思路:将IP地址看成4位256进制的数,转化成十进制,一个segment就是一个区间。先将所有的segment按左端点升序排列,如果几个segment有重叠,则将它们合并成一个区间。int dn=0; l=seg[0].start; r=seg[0].end; for(int j=1;j<i;j++) { if(seg[j].start<=r) { r=max(seg[j].end,r); continue; } seg[dn].s...
阅读全文
posted @
2012-08-24 16:06
MicZ
阅读(163)
推荐(0)
HOJ 2576 Simple Calculation 容斥原理(DFS)
摘要:输入两个数n,m,再输入一个有n元素的集合x[n]。求从[1,m]中有多少个数,能被x[n]中至少一个数整除。这题利用了容斥原理。容斥原理在编程中实现起来一般有dfs+剪枝和按位运算两种。按位运算易于调试,但是不适于大数据量。第一次写还是感觉挺困难的,参考了别人的代码。是用dfs写的。参照他的思路我自己又写了一遍,却总是WA,找了好久也没发现错在哪。。。先贴上来吧。自己写的WA代码:#include<iostream>
#include<cstdio>
using namespace std;
typedef long long LL;
int len,num[20];
阅读全文
posted @
2012-08-23 19:59
MicZ
阅读(207)
推荐(0)