Accept: 147 Submit: 474
Time Limit: 1000 mSec Memory Limit : 32768 KB
vcq9ysejrM6su6TSu9XFvMfCvMTatObKudPDx+m/9rXEse3AtMSjxOLE2rTmtcS05rSix+m/9qOsxuTIztK7se3P7r/JxNzKx9LUz8LBvdbWx+m/9tau0rujutK7uPbS0bfWxeS4+L34s8y1xMTatObH+Lvy1d/Su7j2v9XP0LXExNq05sf4oaOx7dbQw7/Su7j2se3P7rqs09DS1M/CxNrI3aO6v9XP0Mf4u/LS0cq508PE2rTmx/i1xNa4yr6x6ta+oaLE2rTmtPPQoaGi1rjP8s/C0rux7c/utcTWuNXroaM8YnI+CtK7uPax7c/u0ruw49PQ0ru49sewx/2x7c/uus3Su7j2uvO8zLHtz+6jqLP9t8fV4rj2se3P7srHxNq05rXE1+6117bLu/LX7raltsujqaOs0tHKudPDx/ix7c/utcTHsMf9se3P7rrNuvO8zLHtz+6/ycTcysfS0cq508PH+LHtz+7Ssr/JxNzKx7/Vz9DH+LHtz+6jrLb4v9XP0Mf4se3P7rXEx7DH/bHtz+66zbrzvMyx7c/u1ru/ycTcysfS0cq508PH+LHtz+6jrNLyzqrI57n7wb249r/Vz9DH+LHtz+7I57n7u6XOqs/gwdq1xLHtz+6jrM7Sw8e+zb/J0tS9q8v8w8e6z7KizqrSu7j2v9XP0Mf4se3P7qOsxNq05rTz0KHOqsG9uPa/1c/Qx/ix7c/u1q66zaGjPGJyPgq1sc+1zbO0tL2o0ru49tDCtcS9+LPMyrGjrNPQuty24NbWt723qL/J0tTTw8C0zqrQwrS0vai1xL34s8y31sXkxNq05qOs1NrV4sDvztLDx7zZyejS0daq0MK9+LPM0qrVvNPDtcTE2rTmtPPQoaOssqLWu7/JxNy4+L34s8y31sXkwazQ+LXExNq05r/VvOSho9Tasb7M4tbQo6zO0sPHssnTw9fuvNHKysXky+O3qMC0t9bF5MTatOaho9fuvNHKysXky+O3qMvRy/fV+7j2se2jrNXSs/a5u9PDtcTX7tChtcS/1c/Qx/ijqMjn09C24Lj2o6zIobHt1tDX7sewtcSjqaOssqK9q9DCvfizzLfWxeTU2r/Vz9DH+LXEtqWyv6OsyOfT0Mqj0+DE2rTmyNTX986qv9XP0Mf4se3P7qOssqLH0s6q0MLS0cq508PH+LHtz+61xM/C0rux7c/uoaM8YnI+CrWxz7XNs73hyvjSu7j2vfizzMqxo6zU2tX7uPax7dbQ1dK1vc/g06a1xNLRyrnTw8f4se3P7rKivavG5LHkzqq/1c/Qx/ix7c/uoaM8YnI+CsTjtcTIzs7xysex4NC00ru49rPM0PKjrMC0yrXP1tXi0fnSu7j2xNq05rncwO21xLn9s8yho9Tasb7M4tbQLLP1yrzKscTatOax7da709DSu7j2xNq05r/Vz9DH+LHtz+6jrMfSxNq05rTz0KHOqjEwMLj2taXOu7Tz0KGhozxicj4KCjxoMj48aW1nIHNyYz0="https://www.cppentry.com/upload_files/article/49/1_f8vz3__.gif" alt="\"> Input
输入数据第一行为一整数T,表示有T组输入数据。每组数据每行是一个系统命令,包括“Create”,“Delete”,“Print”,“End”,每条命令后面的参数如下:
Create:两个整数i和size,i表示新进程的进程号,i>0,size表示新进程需占用的内存大小,size>0,输入保证新进程的进程号与已存在的进程号不同。
Delete:一个整数i,i>0,表示要结束的进程号。
Print:无参数。
End:无参数,不做任何处理,表示系统终止命令。
注意:输入保证出现的表项个数不超过100个。
Output
对于Create命令,如果成功创建新进程,输出一行“Create process i of size s successfully!”,其中i为新进程的进程号,s为新进程占用的内存大小;如果无足够大小的内存空闲区,输出一行“No enough memory!”。
对于Delete命令,如果成功结束进程,输出一行“Delete process i of size s successfully!”,其中i为结束进程的进程号,s为该进程占用的内存大小;如果内存中无该进程,输出一行“No such process!”。
对于Print命令,将内存表从表头开始按顺序输出,每行输出一个表项,进程表项格式为“P 进程号 内存大小”,空闲区表项格式为“H 内存大小”。
对于End命令,不做任何处理,终止程序。
Sample Input
2Create 1 30Create 2 20Create 3 30PrintCreate 4 100Delete 4Delete 2PrintDelete 3PrintEndCreate 1 100PrintEnd
Sample Output
Create process 1 of size 30 successfully!Create process 2 of size 20 successfully!Create process 3 of size 30 successfully!P 1 30P 2 20P 3 30H 20No enough memory!No such process!Delete process 2 of size 20 successfully!P 1 30H 20P 3 30H 20Delete process 3 of size 30 successfully!P 1 30H 70Create process 1 of size 100 successfully!P 1 100
Source
福州大学第七届程序设计竞赛
题意大家应该看得懂~
做法:其实说难也难,因为很麻烦,说简单也简单,就是分步做。
首先Creat操作,注意点是若有几个相同大小的空间,取最前面的那一个,还有就是除非这一块内存有剩,不然,不然不能另开一个空闲区~
接着Delete操作,注意点是会有连锁效应,我举个例子,1代表已占用内存,0代表未占用内存,那么10101的时候,若删掉最中间的1,那么出现2和3合并,合并完后还能合并!
然后是Print操作和End操作,这两个简单,我是编码的时候临时想。。。
AC代码:
#include#include struct memory{ int mark; int num; int space; memory *next; }; int main() { in