FOJ 1893 内存管理 //模拟
2015-07-26 17:19
225 查看
题目描述
内存管理解题思路
可以用一个bool数组来模拟内存区,被占用的区域用memset打上标记.参考代码
#include <iostream> #include <algorithm> #include <vector> #include <string> #include <cstring> #include <map> const int maxn = 110; using namespace std; struct Process{ int begin,size,flag; }pro[maxn]; bool unit[maxn]; int Find(int size){//找到一段内存大小为size的区域,返回起始地址 int cnt = 0; for (int i = 1;i <= 100;i++){ for (int j = i;j <= 100;j++){ if (!unit[j]){ cnt++; if (cnt == size) return i; }else{ i = j; cnt = 0; break; } } cnt = 0; } return 0; } int main() { int T; scanf("%d",&T); string opr; while (T--){ memset(pro,0,sizeof(pro)); memset(unit,false,sizeof(unit)); map<int,int> m; while (cin >> opr && opr != "End"){ if (opr == "Create"){ int num,size; scanf("%d %d",&num,&size); int begin = Find(size); if (begin){ memset(unit+begin,true,sizeof(bool)*size); pro[num].flag = 1; pro[num].begin = begin; pro[num].size = size; m[begin] = num; printf("Create process %d of size %d successfully!\n",num,size); }else printf("No enough memory!\n"); }else if (opr == "Delete"){ int num; scanf("%d",&num); if (pro[num].flag){ memset(unit+pro[num].begin,false,sizeof(bool)*pro[num].size); pro[num].flag = 0; m[pro[num].begin] = 0; printf("Delete process %d of size %d successfully!\n",num,pro[num].size); }else printf("No such process!\n"); }else if (opr == "Print"){ int cnt = 1; for (int i = 1;i <= 100;i++){ if (m[i]){ int num = m[i],size = pro[m[i]].size; printf("P %d %d\n",num,size); i += size-1; }else{ if (m[i+1] || (!m[i+1] && i == 100)){ printf("H %d\n",cnt); cnt = 1; } else cnt++; } } } } } return 0; }
相关文章推荐
- 垃圾邮件和贝叶斯过滤算法
- hdu1540Tunnel Warfare 线段树
- 莱杰:期刊进口流程(文件 ID 1591640.1)
- 查找单链表的中间节点
- Volley 简介
- 技术向:一文读懂卷积神经网络
- 使用JQuery Deferred对象的then() 解决多个AJAX操作顺序依赖的问题
- js数组转换成json数组(包含extjs的checkbox勾选项获取办法)
- [FOJ 1891] 升降序列
- WTL中CListViewCtrlT的GetItemText的实现分析
- 用Fluentd实现收集日志到HDFS(上)
- redis事务及事务乐观锁
- BFS
- 剑指offer_面试题6_重建二叉树(分解步骤,逐个击破)
- Poj 1655 Balancing Act (树的重心)
- php检测文本的编码
- Rectangle Area
- Volley 实现原理解析
- [未完]散列_散列函数
- ACdream DP专题训练