喝奶茶最大值(不能喝自己班级的)2019 Multi-University Training Contest 8--hdu杭电第8场(Roundgod and Milk Tea)
2024-09-05 11:46:21
题目链接: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;
}
最新文章
- JMeter学习-030-JMeter性能测试常用之事务控制器实例
- 用excel做分组散点图
- localStorage、sessionStorage在无痕模式下被禁用
- docker 安装
- [LeetCode] Number of Islands II
- 【UVA 11383】 Golden Tiger Claw (KM算法副产物)
- HTML邮件注意事项
- 【转】ipad死机了,无法退出,也无法关机,怎么办
- VS2010下测试程序性能瓶颈
- 邮箱自动完成(jquary效果)
- 为什么要学Python
- 蓝桥杯-大衍数列-java
- 关于spingMVC使用时配置自动扫描出现的路径报错
- javaweb-1-B/S初论
- 在Linux的Windows子系统上(WSL)使用Docker(Ubuntu)
- Swagger UI 与SpringMVC的整合 II
- POJ 3984(DFS入门题 +stack储存路径)
- php支持连接sqlserver数据库
- CentOS7使用winbind加入AD
- 一分钟搞懂 JavaScript this 指向问题
热门文章
- koa 基础(二十五)数据库 与 art-template 模板 联动 --- 新增数据
- [go]os.Open方法源码
- 实用的60个CSS代码片段[上]
- Java之HSF搭建demo
- 【经验】PHP开发中 &;#65279 导致页头一行空白
- IPTV系统的VOD与TV业务性能测试
- Markdown 介绍
- fastjson反序列化LocalDateTime失败的问题java.time.format.DateTimeParseException: Text &#39;2019-05-24 13:52:11&#39; could not be parsed at index 10
- 086. Partition List
- Asp.Net Core 反向工程