思路:
设进程最小耗费值minp=1,进程最大耗费值为 输入的maxp.
print[k]:进程删除的标志序列
cnt[k]:当前耗费k的进程数
req:请求类别
condition:管理者策略
主要在于输入r的处理
如果 condition==1 枚举(从minp到maxp) 删除最小(第一个cnt[k]!=0)
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
char req;
int maxp;
while(~scanf("%d",&maxp))
{
int plen;
scanf("%d",&plen);
int cnt[maxp+5];
int printk[maxp+5];
int minp=1;
memset(printk,0,sizeof(printk));
memset(cnt,0,sizeof(cnt));
int condition=1;
for(int i=0; i<plen; i++)
{
int a;
scanf("%d",&a);
printk[a]=1;
}
int np=0;
while(cin>>req&&req!='e')
{
if(req=='a')
{
int x;
scanf("%d",&x);
cnt[x]++;
}
if(req=='r')
{
int k;
if(condition==1)
{
for(k=minp; k<=maxp; k++)
{
if(cnt[k]!=0)
{
cnt[k]--;
np++;
break;
}
}
}
if(condition==2)
{
for( k=maxp; k>=minp; k--)
{
if(cnt[k]!=0)
{
cnt[k]--;
np++;
break;
}
}
}
if(printk[np]==1)
cout<<k<<endl;
}
if(req=='p')
{
scanf("%d",&condition);
}
}
printf("\n");
}
}