codeforce 7B. Memory Manager
2015-07-11 15:24
495 查看
题目:http://codeforces.com/problemset/problem/7/B
模拟计算机的内存处理:使用内存,释放内存,整理内存(把未释放区集中于起点)。使用数组模拟一片内存,完成这三种操作。
模拟计算机的内存处理:使用内存,释放内存,整理内存(把未释放区集中于起点)。使用数组模拟一片内存,完成这三种操作。
#include <iostream> #include<cstdio> #include<cstring> using namespace std; int mem[105],cnt; int worka(int k,int m){ for(int i=1;i<=m-k+1;i++){ int f=1; for(int j=i;j<=i+k-1;j++){ if(mem[j]){ f=0; break; } } if(f){ cnt++; for(int j=i;j<=i+k-1;j++)mem[j]=cnt; return 1; } } return 0; } int worke(int k,int m){ int f=0; for(int i=1;i<=m;i++){ if(mem[i]==k){ f=1; mem[i]=0; } } return f; } void defrag(int m){ int i=1,j=1; for(i=1;i<=m;i++){ //find the first zero if(mem[i]){ j++; } else break; } j++; while(j<=m){ //将非0值不断聚向起点 if(mem[j]){ mem[i]=mem[j]; mem[j]=0; i++; } j++; } } int main() { //freopen("cin.txt","r",stdin); int t,m,i,k; char s[20]; while(cin>>t>>m){ memset(mem,0,sizeof(mem)); cnt=0; while(t--){ scanf("%s",s); if(s[0]=='a'){ scanf("%d",&k); if(worka(k,m))printf("%d\n",cnt); else puts("NULL"); } else if(s[0]=='e'){ scanf("%d",&k); if(k==0)printf("ILLEGAL_ERASE_ARGUMENT\n"); //要注意0 else if(k&&!worke(k,m))printf("ILLEGAL_ERASE_ARGUMENT\n"); } else defrag(m); } } return 0; }
相关文章推荐
- Linux常用命令大全
- git遇到的诡异错误: Failed connect to github.com:443
- UI4_UIToolBar
- hibernate.cfg.xml实例
- linux与win7互相远程登录
- SylixOS动态加载器系列文章(4) 内核模块加载原理
- display:inline-block
- lwIP分析
- sb错误
- 设计模式--Bridge
- Bash启动脚本
- win7系统远程桌面链接linux系统
- 用Advanced Installer8.7.1实现简单打包,以打包OCX安装包为例
- 屏幕适配
- CLOSE_WAIT状态的原因与解决方法
- 借鉴网上的winform模仿QQ窗口停靠功能稍作改动
- python修改字典内key对应值的方法
- Linux_多核系统下绑定进程或线程到指定CPU_核执行
- JAVA实现AES的加密和解密算法
- SVN使用教程