题目链接: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的总和就可以加起来了,取个min,ans+=min 就可以了。

 #define IOS ios_base::sync_with_stdio(0); cin.tie(0);
#include <cstdio>//sprintf islower isupper
#include <cstdlib>//malloc exit strcat itoa system("cls")
#include <iostream>//pair
#include <fstream>
#include <bitset>
//#include <map>
//#include<unordered_map>
#include <vector>
#include <stack>
#include <set>
#include <string.h>//strstr substr
#include <string>
#include <time.h>//srand(((unsigned)time(NULL))); Seed n=rand()%10 - 0~9;
#include <cmath>
#include <deque>
#include <queue>//priority_queue<int, vector<int>, greater<int> > q;//less
#include <vector>//emplace_back
//#include <math.h>
//#include <windows.h>//reverse(a,a+len);// ~ ! ~ ! floor
#include <algorithm>//sort + unique : sz=unique(b+1,b+n+1)-(b+1);+nth_element(first, nth, last, compare)
using namespace std;//next_permutation(a+1,a+1+n);//prev_permutation
#define fo(a,b,c) for(register int a=b;a<=c;++a)
#define fr(a,b,c) for(register int a=b;a>=c;--a)
#define mem(a,b) memset(a,b,sizeof(a))
#define pr printf
#define sc scanf
#define ls rt<<1
#define rs rt<<1|1
void swapp(int &a,int &b);
double fabss(double a);
int maxx(int a,int b);
int minn(int a,int b);
int Del_bit_1(int n);
int lowbit(int n);
int abss(int a);
//const long long INF=(1LL<<60);
const double E=2.718281828;
const double PI=acos(-1.0);
const int inf=(<<);
const double ESP=1e-;
const int mod=(int)1e9+;
const int N=(int)1e6+; struct node
{
long long a,b;
long long mi;
friend bool operator<(node a,node b)
{
return a.mi<b.mi;
}
}P[N]; int main()
{
// freopen("D:\\QQ DATA\\1659826587\\FileRecv\\hdu-multi2019-8 5个账号 - 复件\\data\\k.in","r",stdin);
int T;
sc("%d",&T);
while(T--)
{
int n;
sc("%d",&n);
fo(i,,n)
{
sc("%lld%lld",&P[i].a,&P[i].b);
P[i].mi=min(P[i].a,P[i].b);
}
sort(P+,P++n);
long long ans=;
int pos=n;
for(int i=n-;i>=;--i)
{
long long temp=min(P[i].mi,P[pos].mi);
ans+=temp*;
P[i].mi-=temp;P[i].a-=temp;P[i].b-=temp;
P[pos].mi-=temp;P[pos].a-=temp;P[pos].b-=temp;
if(P[i].mi)
pos=i;
}
sort(P+,P++n);
struct node temp=P[n];
long long x=,y=;
for(int i=;i<=n-;++i)
x+=P[i].a,y+=P[i].b;
if(x&&temp.b)
{
long long tt=min(x,temp.b);
ans+=tt;
x-=tt;temp.b-=tt;
}
if(y&&temp.a)
{
long long tt=min(y,temp.a);
ans+=tt;
y-=tt;temp.a-=tt;
}
long long xx=min(x,y);
ans+=xx;
x-=xx;y-=xx;
pr("%lld\n",ans);
}
// fclose(stdin);
return ;
} /**************************************************************************************/ int maxx(int a,int b)
{
return a>b?a:b;
} void swapp(int &a,int &b)
{
a^=b^=a^=b;
} int lowbit(int n)
{
return n&(-n);
} int Del_bit_1(int n)
{
return n&(n-);
} int abss(int a)
{
return a>?a:-a;
} double fabss(double a)
{
return a>?a:-a;
} int minn(int a,int b)
{
return a<b?a:b;
}

最新文章

  1. JMeter学习-030-JMeter性能测试常用之事务控制器实例
  2. 用excel做分组散点图
  3. localStorage、sessionStorage在无痕模式下被禁用
  4. docker 安装
  5. [LeetCode] Number of Islands II
  6. 【UVA 11383】 Golden Tiger Claw (KM算法副产物)
  7. HTML邮件注意事项
  8. 【转】ipad死机了,无法退出,也无法关机,怎么办
  9. VS2010下测试程序性能瓶颈
  10. 邮箱自动完成(jquary效果)
  11. 为什么要学Python
  12. 蓝桥杯-大衍数列-java
  13. 关于spingMVC使用时配置自动扫描出现的路径报错
  14. javaweb-1-B/S初论
  15. 在Linux的Windows子系统上(WSL)使用Docker(Ubuntu)
  16. Swagger UI 与SpringMVC的整合 II
  17. POJ 3984(DFS入门题 +stack储存路径)
  18. php支持连接sqlserver数据库
  19. CentOS7使用winbind加入AD
  20. 一分钟搞懂 JavaScript this 指向问题

热门文章

  1. koa 基础(二十五)数据库 与 art-template 模板 联动 --- 新增数据
  2. [go]os.Open方法源码
  3. 实用的60个CSS代码片段[上]
  4. Java之HSF搭建demo
  5. 【经验】PHP开发中 &amp;#65279 导致页头一行空白
  6. IPTV系统的VOD与TV业务性能测试
  7. Markdown 介绍
  8. fastjson反序列化LocalDateTime失败的问题java.time.format.DateTimeParseException: Text &#39;2019-05-24 13:52:11&#39; could not be parsed at index 10
  9. 086. Partition List
  10. Asp.Net Core 反向工程