poj 1281(简单模拟题)

这是一个关于POJ 1281题目的解析,涉及进程模拟问题。模拟操作包括添加进程(a x)、按策略取出进程(r)、修改管理策略(p i)以及结束模拟(e)。初始管理策略是取出花费最大的进程,可以切换到取出花费最小的进程。解题关键在于正确处理各种操作并遵循给定的规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      题意:进程模拟。设有一个容器,对这个容器有下面四种操作:

                 a x:将一个花费为x的进程放入容器;

                 r:根据manager policy 取出花费最大还是最小的进程;

                 p i:修改manager policy ,i只有两种取值,即1和2;

                 e:结束模拟。

                 另外,manager policy 初始值是1,。并且,1代表取出最大花费的进程,2代表取出最小花费的进程。

                注意:结束一个模拟后要多输出一个回车,就因为这个PE了一次。。。。

代码如下:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<queue>
#include<stack>
#include<set>
#include<map>
using namespace std;
const int M=1010;
const int N=11000;
bool g[N][N],vis[N];
int n,m,ans,match[N];
int l[N],q[N],len;
int query(int p)
{
    int t=0;
    for (int i=1;i<len;i++){
        if (p==1)
        {
            if (q[i]<q[t]) t=i;
        }
        else {  if (q[i]>q[t]) t=i; }
    } int r=q[t];
    for (int i=t+1;i<len;i++) q[i-1]=q[i];
    len--;
    return r;
}
int main()
{
    char c;
    int p=1;
    int que[N];
    while(~scanf("%d%d",&n,&m))
    {
        int top=0;
        for (int i=0;i<m;i++) scanf("%d",l+i);
        int k,j;
        p=1;    k=j=len=0;
        while(cin>>c && c!='e'){
            if (c=='a'){
                scanf("%d",q+len); len++;
            }
            else if (c=='r'){
                if (len<=0) { printf("-1\n"); }
                k++;
                int t=query(p);
                if (l[j]==k){
                    j++;
                    que[top++]=t;
                }
            }
            else if (c=='p'){
                scanf("%d",&p);
            }
            else break;
        }
        for (int i=0;i<top;i++) printf("%d\n",que[i]); printf("\n");
    }
}



/*
100
5
1 2 3 4 5
a 10
a 13
a 9
r
r
a 7
a 6
r
p 2
r
r


*/










评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值