1. 程式人生 > >UVA 210 雙端佇列、模擬

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;
}