zoukankan      html  css  js  c++  java
  • 洗衣服和烘干衣服(优先队列+思维)

    题意:

    给你n件衣服,w个洗衣机,m个烘干机。

    烘干必须等洗完了才能烘干,多台机器可以同时工作。

    思路:

    两次优先队列:烘干衣服那边的优先队列有点难想到,而且倒过来遍历:最后一件衣服尽量用快的烘干机烘干也不容易想到。

    代码中有注释。

      1 #define IOS ios_base::sync_with_stdio(0); cin.tie(0);
      2 #include <cstdio>//sprintf islower isupper
      3 #include <cstdlib>//malloc  exit strcat itoa system("cls")
      4 #include <iostream>//pair
      5 #include <fstream>//freopen("C:\Users\13606\Desktop\草稿.txt","r",stdin);
      6 #include <bitset>
      7 //#include <map>
      8 //#include<unordered_map>
      9 #include <vector>
     10 #include <stack>
     11 #include <set>
     12 #include <string.h>//strstr substr
     13 #include <string>
     14 #include <time.h>//srand(((unsigned)time(NULL))); Seed n=rand()%10 - 0~9;
     15 #include <cmath>
     16 #include <deque>
     17 #include <queue>//priority_queue<int, vector<int>, greater<int> > q;//less
     18 #include <vector>//emplace_back
     19 //#include <math.h>
     20 //#include <windows.h>//reverse(a,a+len);// ~ ! ~ ! floor
     21 #include <algorithm>//sort + unique : sz=unique(b+1,b+n+1)-(b+1);+nth_element(first, nth, last, compare)
     22 using namespace std;//next_permutation(a+1,a+1+n);//prev_permutation
     23 #define fo(a,b,c) for(register int a=b;a<=c;++a)
     24 #define fr(a,b,c) for(register int a=b;a>=c;--a)
     25 #define mem(a,b) memset(a,b,sizeof(a))
     26 #define pr printf
     27 #define sc scanf
     28 #define ls rt<<1
     29 #define rs rt<<1|1
     30 typedef long long ll;
     31 void swapp(int &a,int &b);
     32 double fabss(double a);
     33 int maxx(int a,int b);
     34 int minn(int a,int b);
     35 int Del_bit_1(int n);
     36 int lowbit(int n);
     37 int abss(int a);
     38 //const long long INF=(1LL<<60);
     39 const double E=2.718281828;
     40 const double PI=acos(-1.0);
     41 const int inf=(1<<30);
     42 const double ESP=1e-9;
     43 const int mod=(int)1e9+7;
     44 const int N=(int)1e6+10;
     45 
     46 struct node
     47 {
     48     ll t,End;
     49     friend bool operator<(node a,node b)
     50     {
     51         return a.End>b.End;
     52     }
     53 };
     54 
     55 ll cloth[N];
     56 priority_queue<node> q;
     57 
     58 int main()
     59 {
     60 //    freopen("C:\Users\13606\Desktop\草稿.txt","r",stdin);
     61     int T,cont=0;
     62     sc("%d",&T);
     63     while(T--)
     64     {
     65         int n,W,H;
     66         sc("%d%d%d",&n,&W,&H);
     67         while(!q.empty())q.pop();
     68         for(int i=1;i<=W;++i)
     69         {
     70             ll t;
     71             sc("%lld",&t);
     72             q.push({t,t});
     73         }
     74         for(int i=1;i<=n;++i)//t表示再洗一件要花的时间;
     75         {                    // End是如果在用这个机器洗的话,洗完之后是什么时候;
     76             node temp=q.top();q.pop();
     77             cloth[i]=temp.End;
     78             q.push({temp.t,temp.End+temp.t});
     79         }
     80         while(!q.empty())q.pop();
     81         for(int i=1;i<=H;++i)
     82         {
     83             ll t;
     84             sc("%lld",&t);
     85             q.push({t,t});
     86         }
     87         ll ans=0;
     88         for(int i=n;i>=1;--i)//t表示再洗一件要花的时间;
     89         {                    // End表示如果再用这台机器洗的话会花多久;
     90             node temp=q.top();q.pop();//而且我们发现,对于这件衣服,就算后面一件衣服同样也用了
     91             ans=max(ans,cloth[i]+temp.End);//这一台洗衣机的话,无论是否交错(需要等待)
     92             q.push({temp.t,temp.End+temp.t});//都会花去TIME_sum+t的时间;
     93         }
     94         pr("Case #%d: %lld
    ",++cont,ans);
     95     }
     96     return 0;
     97 }
     98 
     99 /**************************************************************************************/
    100 
    101 int maxx(int a,int b)
    102 {
    103     return a>b?a:b;
    104 }
    105 
    106 void swapp(int &a,int &b)
    107 {
    108     a^=b^=a^=b;
    109 }
    110 
    111 int lowbit(int n)
    112 {
    113     return n&(-n);
    114 }
    115 
    116 int Del_bit_1(int n)
    117 {
    118     return n&(n-1);
    119 }
    120 
    121 int abss(int a)
    122 {
    123     return a>0?a:-a;
    124 }
    125 
    126 double fabss(double a)
    127 {
    128     return a>0?a:-a;
    129 }
    130 
    131 int minn(int a,int b)
    132 {
    133     return a<b?a:b;
    134 }
  • 相关阅读:
    小小的学习FPGA建议
    不厌其烦的四大集成电路
    关于FPGA复位的认识
    FPGA与图像处理
    谈谈对zynq的浅显理解
    嵌入ARM硬核的FPGA
    FPGA时序约束一点总结
    FPGA时序优化简单窍门
    学习FPGA,踏上一步台阶
    使用poi读取word2007(.docx)中的复杂表格
  • 原文地址:https://www.cnblogs.com/--HPY-7m/p/11455447.html
Copyright © 2011-2022 走看看