紫书章六例题一(双端口队列)

来源:互联网 发布:手机淘宝销量排名 编辑:程序博客网 时间:2024/06/05 18:24

题目比较难懂,然后之后的就还好。双端口队列
deque q;
q.push_back();
q.push_front();
q.pop_front();
q.pop_back();
q.front();

#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <queue>#include <vector>#include <sstream>using namespace std;const int maxn = 1005;vector<string> v[maxn];queue< int >  qz;deque < int > qd;int p[maxn];//进行到第几步int val[30];//变量的值int t[10],Q;int LOCK=0;void run(int i){    int total=Q;    while(total>0)//注意是大于0!!!    {        string cur=v[i][p[i]];        if(cur[2]=='=')        {            total-=t[0];            string a=cur.substr(4);            stringstream ss;            ss<<a;            int len;            ss>>len;            val[cur[0]-'a']=len;        }        else if(cur[2]=='i')        {            total-=t[1];            printf("%d: %d\n",i,val[cur[6]-'a']);        }        else if(cur[2]=='c')        {            total-=t[2];            if(!LOCK) {LOCK=1;}            else {qz.push(i);return ;}        }        else if(cur[2]=='l')        {            total-=t[3];            LOCK=0;            if(!qz.empty()){            int tt=qz.front();            qz.pop();            qd.push_front(tt);            }        }      /*  else if(cur[2]=='d')        {            total-=t[4];            flag=1;            continue;        }*/        else return ;//如果为end的话直接return,还不用考虑那么多        p[i]++;    }  qd.push_back(i);}int main(){   // freopen ("E:\\input.txt","r",stdin);    int case1;    scanf("%d",&case1);    while(case1--){       // while(!qz.empty()) qz.pop();        //for(int i=0;i<maxn;i++)v[i].clear();        memset(val,0,sizeof(val));     //   memset(t,0,sizeof(t));        memset(p,0,sizeof(p));        int n;        scanf("%d",&n);          for(int j=0;j<5;j++)                scanf("%d",&t[j]);        scanf("%d",&Q);        for(int i=1;i<=n;i++)        {            v[i].clear();            string s;            while(getline(cin,s))            {                if(s=="") continue;                v[i].push_back(s);                if(s=="end")                    break;            }            qd.push_back(i);        }        while(!qd.empty())        {            int temp=qd.front();            qd.pop_front();            run(temp);        }        if(case1) printf("\n");    }    return 0;}
0 0
原创粉丝点击