6-1 并行程序模拟 uva210

一个较难得模拟题 

用到了 deque 和queue

操作说明:

queue  qu:      qu.push(x); 

                        int d=qu.front();

                          qu.pop();        和栈一样只有push和pop操作,front是看第一个!   栈里面是top

deque de:    de.push_front(x);

                       de.push_back(x);

                      int x=de.front();

                      de.pop_front();

                     de.back_front();//push 和pop 加上后缀

检查了一个小时 发现是头文件有问题    :当使用bool时  不能用 include<bits/stdc++.h>

一开始题目理解错误 弄了好久  原来是一个程序一个程序往下!明明说的很清楚

一个模拟题 也不算太难  熟练使用queue和deque 的各种操作就好了

1. s == "end"   string 类型可以直接这样判断 

2、其中的  if(s == "") continue;//???

如果没有这条  会遭到很多干扰 类似换行符 

就像刚刚用scanf读取完  留下了一个换行符

如果没有这条语句  那么ss 就有一个值为换行符  这是我们不想见到的 

就把这条语句当作是 读取多行文件必须加的吧!

 这题 加上一个getchar 就对了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

#include<bits/stdc++.h>
#include<iostream>
#include<string>
#include<string.h>
#include<cstdio>
#include<deque>
#include<vector>
#include<queue>
using namespace std;
int q[1000]={0};
int val[26]={0};
bool lock;
 int n,t[6],Q;

 vector<string>ss[1000];
         deque<int>de;//总队列
         queue<int>qu;//阻止队列


void run(int x)
{
    string aim;


    int t1=Q;int v;
    while(t1>0)
    {
        aim=ss[x][ q[x] ];
        if(aim[2]=='=')
        {   t1-=t[0];
            v=aim[4]-'0';
            if(isdigit(aim[5]))v=v*10+aim[5]-'0';
            val[ aim[0]-'a' ]=v;

        }

        else if(aim[0]=='p')
        {
            t1-=t[1];
            printf("%d: %d\n",x,val[aim[6]-'a']);
        }

        else if(aim[0]=='l')
        {
            t1-=t[2];
            if(lock) {
                qu.push(x);

                return ;
            }
            else lock=true;


        }
        else if(aim[0]=='u')
        {   lock=false;
            t1-=t[3];
          if(!qu.empty()){
            int d=qu.front();
            qu.pop();
            de.push_front(d);}


        }
        else return ;

        q[x]++;
    }



    de.push_back(x);


}



int main()
{

    int cas;
    cin>>cas;
    while(cas--)
    {





        cin>>n;
        for(int i=0;i<5;i++)
            cin>>t[i];
        cin>>Q;

        string s;
        for(int i=1;i<=n;i++)
        {   ss[i].clear();
            de.push_back(i);
           while( 1 )
           {getline(cin,s);
            if(s == "") continue;//???

            ss[i].push_back(s);
            if(s == "end") break;

           }


        }
        memset(q,0,sizeof(q));
        memset(val,0,sizeof(val));
        while(!de.empty())
        {

            int x=de.front();
            de.pop_front();
            run(x);


        }
if(cas) printf("\n");



    }




    return 0;
}
View Code

猜你喜欢

转载自www.cnblogs.com/bxd123/p/10285548.html
6-1
今日推荐