并行程序模拟(Concurrency Simulator, ACM/ICPC World Finals 1991, UVa210)

题目链接:UVA210.

1、题意要求使用的其实是双端队列(deque) 具体操作包括:

1.创建时,和其他容器一样的格式,如deque a; 也可以限定元素个数和内容,详细见上述网页;注意要使用头文件deque

2.常用函数: a.push_front() a.push_back() a.pop_front() a.pop_back()从队首或队尾入队或出队

自己在做题时因为还不知道deque所以冒险采用了人工出入队列使得元素插入到队列头,有超时风险,这道题没事

while(exe.front()!=locked.front())
     {
           int tmp = exe.front();
           exe.pop();
           exe.push(tmp);
     }//把解锁的的程序放在队头

如果采用dequeue,则上述操作为:

exe.push_front(locked.front);
locked.pop();

2、最好把run即程序运行的过程写成函数,这样在遇到Lock锁lock和end时可以直接return避免程序再入等待队列。
自己写的时候没有使用函数,增加了一个标志量用来区分是否需要将程序再入队列。

3、自己理解的题意是时间片不够一个命令执行时就放弃时间了(这样写会导致TLE),但其实是只要时间片>0,不管是否够一个指令执行完成,都会执行该指令,然后剩余时间<0再切换程序。

Any instruction currently being executed when the time quantum expires will be allowed to complete.

题意里有这句话:当时间量到期时当前正在执行的任何指令都将被允许完成。

4、代码要尽量简洁,将重复的代码分出来执行。

5、输入其实有些复杂,但自己写的时候还比较顺利,记得注意getline(cin,s)会读取之前留下的回车,导致s为’\n’没有输入。

        //初始化
        initial();
        queue<string>pro[100];
        queue<int>exe;//等待执行队列
        queue<int>locked;//被锁住的程序队列


        if(T++)
            printf("\n");


        int pro_num,per_time;
        cin>>pro_num;
        for(int i=0;i<5;i++)
            cin>>ord_time[i];
        cin>>per_time;


        getchar();//读取多余空行
        string order;
        for(int i=0;i<pro_num;i++)
        {
            while(getline(cin,order))
            {
                //cout<<"get: "<<order<<endl;
                pro[i].push(order);
                if(order=="end")
                    break;
            }
            exe.push(i);
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值