• 喝奶茶最大值(不能喝自己班级的)2019 Multi-University Training Contest 8--hdu杭电第8场(Roundgod and Milk Tea)


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6667

    题意:

    有 n个班级,每个班级有a个人、b个奶茶,每个班的人不能喝自己的奶茶,只能喝别人班的奶茶,问你最多有多少人喝到奶茶。

    思路:

    明显一道贪心题:

    n=3

    3   4  min=3

    4   2  min=2

    4   2  min=2

    首先根据min值从大到小排序先消除大的更优),两个min值是肯定可以消掉一个的,ans+=min*2,而且消到最后最多只有一个a、b都不为0

    然后就是要先判一下最后一个能不能消去。

    最后就是除了最后一个其他a、b的总和就可以加起来了,取个minans+=min 就可以了。

      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>
      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 void swapp(int &a,int &b);
     31 double fabss(double a);
     32 int maxx(int a,int b);
     33 int minn(int a,int b);
     34 int Del_bit_1(int n);
     35 int lowbit(int n);
     36 int abss(int a);
     37 //const long long INF=(1LL<<60);
     38 const double E=2.718281828;
     39 const double PI=acos(-1.0);
     40 const int inf=(1<<29);
     41 const double ESP=1e-9;
     42 const int mod=(int)1e9+7;
     43 const int N=(int)1e6+10;
     44 
     45 struct node
     46 {
     47     long long a,b;
     48     long long mi;
     49     friend bool operator<(node a,node b)
     50     {
     51         return a.mi<b.mi;
     52     }
     53 }P[N];
     54 
     55 int main()
     56 {
     57 //    freopen("D:\QQ DATA\1659826587\FileRecv\hdu-multi2019-8 5个账号 - 复件\data\k.in","r",stdin);
     58     int T;
     59     sc("%d",&T);
     60     while(T--)
     61     {
     62         int n;
     63         sc("%d",&n);
     64         fo(i,1,n)
     65         {
     66             sc("%lld%lld",&P[i].a,&P[i].b);
     67             P[i].mi=min(P[i].a,P[i].b);
     68         }
     69         sort(P+1,P+1+n);
     70         long long ans=0;
     71         int pos=n;
     72         for(int i=n-1;i>=1;--i)
     73         {
     74             long long temp=min(P[i].mi,P[pos].mi);
     75             ans+=temp*2;
     76             P[i].mi-=temp;P[i].a-=temp;P[i].b-=temp;
     77             P[pos].mi-=temp;P[pos].a-=temp;P[pos].b-=temp;
     78             if(P[i].mi)
     79                 pos=i;
     80         }
     81         sort(P+1,P+1+n);
     82         struct node temp=P[n];
     83         long long x=0,y=0;
     84         for(int i=1;i<=n-1;++i)
     85             x+=P[i].a,y+=P[i].b;
     86         if(x&&temp.b)
     87         {
     88             long long tt=min(x,temp.b);
     89             ans+=tt;
     90             x-=tt;temp.b-=tt;
     91         }
     92         if(y&&temp.a)
     93         {
     94             long long tt=min(y,temp.a);
     95             ans+=tt;
     96             y-=tt;temp.a-=tt;
     97         }
     98         long long xx=min(x,y);
     99         ans+=xx;
    100         x-=xx;y-=xx;
    101         pr("%lld
    ",ans);
    102     }
    103 //    fclose(stdin);
    104     return 0;
    105 }
    106 
    107 /**************************************************************************************/
    108 
    109 int maxx(int a,int b)
    110 {
    111     return a>b?a:b;
    112 }
    113 
    114 void swapp(int &a,int &b)
    115 {
    116     a^=b^=a^=b;
    117 }
    118 
    119 int lowbit(int n)
    120 {
    121     return n&(-n);
    122 }
    123 
    124 int Del_bit_1(int n)
    125 {
    126     return n&(n-1);
    127 }
    128 
    129 int abss(int a)
    130 {
    131     return a>0?a:-a;
    132 }
    133 
    134 double fabss(double a)
    135 {
    136     return a>0?a:-a;
    137 }
    138 
    139 int minn(int a,int b)
    140 {
    141     return a<b?a:b;
    142 }
  • 相关阅读:
    java常见异常总结
    敏捷开发的七种主流方法
    转:一位10年Java工作经验的架构师聊Java和工作经验
    Map遍历
    Mybatis中的模糊查询
    Mybatis中动态SQL多条件查询
    J2EE,LAMP和ASP.NET三者比较
    关于加密
    Md5Hash的测试
    CentOS7 修改默认时区为 北京时间
  • 原文地址:https://www.cnblogs.com/--HPY-7m/p/11355986.html
Copyright © 2020-2023  润新知