6-1 并行程序模拟 uva210

Posted bxd123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;//???

 

 

技术分享图片
#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
",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("
");



    }




    return 0;
}
View Code

 

以上是关于6-1 并行程序模拟 uva210的主要内容,如果未能解决你的问题,请参考以下文章

UVa 210 Concurrency Simulator (双端队列+模拟)

UVA 210 双端队列模拟

并行程序模拟

如何在 python 中并行化以下代码片段?

s5pv210中断体系

UVa 213 信息解码 (模拟 && 二进制)