• uva_1422 Processor


    题目链接

    题意:

      有n个任务, 每个任务要在规定的时间[l, r]内完成, 工作量为 w, 每个任务可以分开完成。

      求, 使得所有任务都完成的最大速度的最小值。

    思路:

      最大值最小问题, 二分。

      因为是要完成所有任务, 所以先按开始时间排序, 接下来二分速度。

      因为任意两个任务之间的关系只有两种, 1)相交或者包含 2)相切或者相离

      如果是情况 2) 那么不需要特殊处理, 按顺序处理过去即可。

      如果是情况 1) 那么需要将这个时间段内的任务按照结束时间来进行处理, 结束时间小的优先完成。

      然后枚举时间, 从1 开始处理过去, 看是否能处理完所有任务即可。

    代码:

      

      1 #include <cmath>
      2 #include <cstdio>
      3 #include <cstring>
      4 #include <cstdlib>
      5 #include <ctime>
      6 #include <set>
      7 #include <map>
      8 #include <list>
      9 #include <stack>
     10 #include <queue>
     11 #include <string>
     12 #include <vector>
     13 #include <fstream>
     14 #include <iterator>
     15 #include <iostream>
     16 #include <algorithm>
     17 using namespace std;
     18 #define LL long long
     19 #define INF 0x3f3f3f3f
     20 #define MOD 1000000007
     21 #define eps 1e-6
     22 #define MAXN 10010
     23 #define MAXM 100
     24 #define dd {cout<<"debug"<<endl;}
     25 #define pa {system("pause");}
     26 #define p(x) {printf("%d
    ", x);}
     27 #define pd(x) {printf("%.7lf
    ", x);}
     28 #define k(x) {printf("Case %d: ", ++x);}
     29 #define s(x) {scanf("%d", &x);}
     30 #define sd(x) {scanf("%lf", &x);}
     31 #define mes(x, d) {memset(x, d, sizeof(x));}
     32 #define do(i, x) for(i = 0; i < x; i ++)
     33 #define dod(i, x, l) for(i = x; i >= l; i --)
     34 #define doe(i, x) for(i = 1; i <= x; i ++)
     35 struct node
     36 {
     37     int l;
     38     int r;
     39     int t;
     40     int no;
     41     bool operator < (const struct node &y) const
     42     {
     43         return r > y.r;
     44     }
     45 };
     46 int n, sum;
     47 struct node f[MAXN];
     48 int w[MAXN];    
     49 bool cmp(const struct node &x, const struct node &y)
     50 {
     51     return x.l == y.l? x.r < y.r : x.l < y.l;
     52 }
     53 void read()
     54 {
     55     sum = 0;
     56     scanf("%d", &n);
     57     for(int i = 0; i < n; i ++)
     58     {
     59         scanf("%d %d %d", &f[i].l, &f[i].r, &f[i].t);
     60         sum += f[i].t;
     61         f[i].no = i;
     62     }
     63     sort(f, f + n, cmp);
     64 }
     65 bool is_ok(int x)
     66 {
     67     priority_queue <struct node> Q;
     68     for(int i = 0; i < n; i ++)
     69         w[f[i].no] = f[i].t;
     70     int i = 0;
     71     int pos = 1;
     72     while(true)
     73     {
     74         while(i < n && f[i].l <= pos) Q.push(f[i ++]);
     75 
     76         int ts = x;
     77         while(!Q.empty() && ts)
     78         {
     79             struct node temp = Q.top();
     80 
     81             if(temp.r <= pos) return false;
     82 
     83             w[temp.no] -= ts;
     84             if(w[temp.no] > 0)
     85                 ts = 0;
     86             else if(w[temp.no] <= 0)
     87             {
     88                 ts = -w[temp.no];
     89                 Q.pop();
     90             }
     91         }
     92 
     93         if(i == n && Q.empty()) return true;
     94         pos ++;
     95     }
     96     return false;
     97 }
     98 int get_ans()
     99 {
    100     int l = 1, r = sum;
    101     while(l <= r)
    102     {
    103         int mid = (l + r) / 2;
    104         if(is_ok(mid))
    105             r = mid - 1;
    106         else 
    107             l = mid + 1;
    108     }
    109     return l;
    110 }
    111 
    112 int main()
    113 {
    114     int T;
    115     scanf("%d", &T);
    116     while(T --)
    117     {
    118         read();
    119         printf("%d
    ", get_ans());
    120     }
    121     return 0;
    122 }
    View Code
  • 相关阅读:
    NGUI UIPanel绘制原理学习
    常用转义符
    windows常用快捷键
    用泛型方法Java从实体中提取属性值,以及在泛型方法中的使用
    java浮点型数据保留两位小数
    springboot中静态属性/静态方法从YAML(yml)读取配置属性
    Field in required a single bean, but 2 were found:
    Centos7 安装 Amazon Corretto 8
    Strange Java syntax (for me at least)--怪异的Java语法
    Returning array from function in C
  • 原文地址:https://www.cnblogs.com/By-ruoyu/p/4871431.html
Copyright © 2020-2023  润新知