喝奶茶最大值(不能喝自己班级的)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\n",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 }

 

posted @ 2019-08-15 09:26  ZMWLxh  阅读(281)  评论(0编辑  收藏  举报