zoukankan      html  css  js  c++  java
  • Luogu P2278 [HNOI2003]操作系统【优先队列/重载运算符/模拟】 By cellur925

    题目传送门

    本来是照着二叉堆的题去做的...没想到捡了个模拟...不过模拟我都不会...我好弱啊...


    其实核心代码并不长,比辰哥的标程短到不知哪里去..。但是思路需要清晰。

    读题的时候我明白,当有优先级高的任务来时,要把原先的任务用时减去当前已做的,再把它插进堆。

    难点是更新当前的时间,以及让程序循环起来而不陷入死循环。

    Code

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<queue>
     4 
     5 using namespace std;
     6 
     7 int a,b,c,d,n,pos;
     8 struct cellur{
     9     int id,opt,len;
    10 }item[20000];
    11 priority_queue<cellur>q;
    12 bool operator < (const cellur &x,const cellur &y)
    13 {
    14     if(x.opt==y.opt) return x.id>y.id;
    15     return x.opt<y.opt;
    16 }
    17 
    18 int main()
    19 {
    20     freopen("1.in","r",stdin);
    21     while(scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF)
    22     {
    23         while(!q.empty())
    24         {
    25             cellur x=q.top();q.pop();
    26             if(pos+x.len<=b)//新任务来前能做完当前任务 
    27             {
    28                 pos+=x.len;
    29                 printf("%d %d
    ",x.id,pos);
    30                 //表示堆顶任务完成了  输出 
    31             }
    32             else
    33             {
    34                 x.len-=b-pos;
    35                 q.push(x);
    36                 break;
    37                 //原进程被打断 
    38             }
    39         }
    40         q.push((cellur){a,d,c});
    41         pos=b;//这样更新时间 
    42     }
    43     while(!q.empty())//把堆中元素干掉 
    44     {
    45         cellur x=q.top();q.pop();
    46         pos+=x.len;
    47         printf("%d %d
    ",x.id,pos);
    48     }
    49     return 0;
    50 }
    View Code

    *下次再做比较复杂的模拟,可以不非要从第一种模拟,先模拟普适情况,再回来补充,这样思维会容易。

    我太菜了嘤嘤嘤

  • 相关阅读:
    写一个通用的事件侦听器函数
    基于LuckySheet在线表格的Excel下载功能开发
    node项目中npm 第三方包引用规则
    js 本地保存 json/txt 文件
    letcood 算法题 -- 两数相加
    ES6新增语法总结
    关于Promise,你必须知道的几点。
    Promise 基础
    学习网页收藏
    android Listview每一个item添加点击事件
  • 原文地址:https://www.cnblogs.com/nopartyfoucaodong/p/9756793.html
Copyright © 2011-2022 走看看