• 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>
    using namespace std;
    int val[26],t[6],Q,q[100];
    bool lock;
    deque<int>de;
    queue<int>zz;
    vector<string>ans[10000];
    
    void run(int x);
    
    int main()
    {
        int cas;cin>>cas;
        while(cas--)
        {
    
            int n;
            cin>>n;
            for(int i=0;i<5;i++) cin>>t[i];
            cin>>Q;getchar();
            for(int i=1;i<=n;i++)
            {    ans[i].clear();
                string s;
                while(getline(cin,s))
                {
                    if(s=="end")break;
                    else ans[i].push_back(s);
                }
                de.push_back(i);
    
            }
            memset(q,0,sizeof(q));
            memset(val,0,sizeof(val));
    
            while(!de.empty())//通过队列里是否还有任务等待判定
            {
    
                int x=de.front();
                 de.pop_front();
    
                  run(x);
    
    
            }
    
    
        }
    
    
    
        return 0;
    }
    
    
    void run(int x)
    {   int v=0;
        int t1=Q;
    
        while(t1>0)
        {   string aim=ans[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) lock=!lock;
                else {zz.push(x);return ;}
            }
            else if(aim[0]=='u')
            {
                 t1-=t[3];
                if(lock) lock=!lock;
                if(!zz.empty())//题意!
                {
                    int d=zz.front();zz.pop();
                    de.push_front(d);
    
                }
    
            }
            else return ;
              q[x]++;//放在上面自加是错误的  说明进入阻止队列时那次不算
        }
    
        de.push_back(x);
    
    
    }
    View Code
  • 相关阅读:
    substr函数
    Oracle 日期处理
    translate函数使用
    nvl函数
    random随机函数
    case语句
    列的拼接
    并行HASH JOIN小表广播问题
    WITH AS 优化逻辑读
    【hihoCoder挑战赛28 A】异或排序
  • 原文地址:https://www.cnblogs.com/bxd123/p/10285548.html
Copyright © 2020-2023  润新知