UVA 210 双端队列模拟

Posted zhangzehua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA 210 双端队列模拟相关的知识,希望对你有一定的参考价值。

 

模拟单道处理系统。注意不同的程序可能会使用同一变量。

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e3+5;

deque<int>ls;
queue<int>ns;
vector<string>cs[N];
int nt[6],rt,p[N],val[2][N],var[26];
bool mark;

void read_time()
{
    for(int i=0; i<5; i++)
    {
        cin>>nt[i];
    }
}

void read_code(int n)
{
    string str;
    ls.clear();

    for(int i=1; i<=n; i++)
    {
        cs[i].clear();
        while(getline(cin,str))
        {
            if(str=="")
                continue;
            cs[i].push_back(str);
            if(str=="end")
                break;
        }
        ls.push_back(i);
    }

}

void run(int i)
{
    int t=rt,num;
    string str;

    while(t>0)
    {
        str=cs[i][p[i]];
        if(str[2]==‘=‘)
        {
            t-=nt[0];
            num=str[4]-‘0‘;
            for(int j=5;j<str.size();j++)
            {
                num*=10;
                num+=str[j]-‘0‘;
            }

            var[str[0]-‘a‘]=num;
        }
        else if(str[2]==‘i‘)
        {
            t-=nt[1];
            cout<<i<<": "<<var[str[6]-‘a‘]<<endl;
        }
        else if(str[2]==‘c‘)
        {
            t-=nt[2];
            if(mark)
            {
                ns.push(i);
                return;
            }
            mark=true;
        }
        else if(str[2]==‘l‘)
        {
            t-=nt[3];
            mark=false;
            if(!ns.empty())
            {
                ls.push_front(ns.front());
                ns.pop();
            }
        }
        else
        {
            return;
        }
        p[i]++;
    }
    ls.push_back(i);

}

int main()
{
    //freopen("1.in","r",stdin);
    //freopen("1.out","w",stdout);

    ios::sync_with_stdio(false);
    cin.tie();

    int T;
    cin>>T;

    while(T--)
    {
        int n;

        cin>>n;

        read_time();

        cin>>rt;

        read_code(n);

        while(!ns.empty())ns.pop();
        mark=false;
        memset(p,0,sizeof(p));
        memset(var,0,sizeof(var));
        while(ls.size())
        {
            int i=ls.front();
            ls.pop_front();
            run(i);
        }

        if(T)
            cout<<""<<endl;
    }

    //fclose(stdin);
    //fclose(stdout);
    return 0;
}

  

以上是关于UVA 210 双端队列模拟的主要内容,如果未能解决你的问题,请参考以下文章

6-1 并行程序模拟 uva210

C++初阶----deque(双端队列)+stack queue模拟实现

BZOJ2457[BeiJing2011]双端队列 贪心+模拟

[程序员代码面试指南]栈和队列-生成窗口最大值数组(双端队列)

hdu-5929 Basic Data Structure(双端队列+模拟)

UVA 210 Concurrency Simulator