题意:有n个班级,每个班级有a[i]个人,b[i]杯奶茶

每个人至多喝一杯奶茶,且不能喝自己班的

问能喝到奶茶的最多总人数

n<=1e6,a[i],b[i]<=1e9

思路:

做法一:

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef pair<ll,ll> Pll;
typedef vector<int> VI;
typedef vector<PII> VII;
//typedef pair<ll,ll>P;
#define N 1000010
#define M 200010
#define fi first
#define se second
#define MP make_pair
#define pb push_back
#define pi acos(-1)
#define mem(a,b) memset(a,b,sizeof(a))
#define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
#define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
#define lowbit(x) x&(-x)
#define Rand (rand()*(1<<16)+rand())
#define id(x) ((x)<=B?(x):m-n/(x)+1)
#define ls p<<1
#define rs p<<1|1 const int MOD=1e9+,inv2=(MOD+)/;
double eps=1e-;
int INF=1e9;
int inf=0x7fffffff;
int dx[]={-,,,};
int dy[]={,,-,}; ll a[N],b[N]; ll read()
{
ll v=,f=;
char c=getchar();
while(c<||<c) {if(c=='-') f=-; c=getchar();}
while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
return v*f;
} void solve()
{
int n;
scanf("%d",&n);
ll s=,ans=;
rep(i,,n)
{
a[i]=read(),b[i]=read();
s+=b[i];
}
rep(i,,n) ans+=min(a[i],s-b[i]);
ans=min(ans,s);
printf("%I64d\n",ans);
} int main()
{
int cas=read();
while(cas--) solve();
return ;
}

做法二:题解做法

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef pair<ll,ll> Pll;
typedef vector<int> VI;
typedef vector<PII> VII;
#define N 1100000
#define M 4100000
#define fi first
#define se second
#define MP make_pair
#define pi acos(-1)
#define mem(a,b) memset(a,b,sizeof(a))
#define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
#define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
#define lowbit(x) x&(-x)
#define Rand (rand()*(1<<16)+rand())
#define id(x) ((x)<=B?(x):m-n/(x)+1)
#define ls p<<1
#define rs p<<1|1 const ll MOD=1e9+,inv2=(MOD+)/;
double eps=1e-;
int INF=1e9; int read()
{
int v=,f=;
char c=getchar();
while(c<||<c) {if(c=='-') f=-; c=getchar();}
while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
return v*f;
} int a[N],b[N]; int main()
{
//freopen("1.in","r",stdin);
int cas;
scanf("%d",&cas);
while(cas--)
{
int n=read();
ll sa=,sb=;
rep(i,,n)
{
a[i]=read(); b[i]=read();
sa+=a[i];
sb+=b[i];
}
if(sa>sb)
{
int flag=,s=;
rep(i,,n)
if(a[i]+b[i]-(sa-sb)>sb)
{
flag=;
s=a[i]+b[i]-(sa-sb)-sb;
}
if(flag) printf("%I64d\n",sb-s);
else printf("%I64d\n",sb);
}
else
{
int flag=,s=;
rep(i,,n)
if(a[i]+b[i]-(sb-sa)>sa)
{
flag=;
s=a[i]+b[i]-(sb-sa)-sa;
}
if(flag) printf("%I64d\n",sa-s);
else printf("%I64d\n",sa);
}
} return ;
}

最新文章

  1. sed命令详解
  2. javascript 多线程Web Worker不引用外部js文件的方法
  3. CSS3-Media Query 基础
  4. 关于 List&lt;T&gt;
  5. [转]C#将image中的显示的图片转换成二进制
  6. 绝对震撼 7款HTML5动画应用及源码
  7. CentOS查看系统信息-CentOS查看命令
  8. Linux文件保护禁止修改、删除、移动文件等,使用chattr +i保护
  9. (转载)delphi实例TDBGrid用右键菜单复制行粘贴行
  10. Bootstrap 轮播(Carousel)插件
  11. 【css面试题】三个DIV要求水平对齐,左右两个DIV宽度固定为100px,中间那个DIV充满剩余的宽度(至少2种方法)
  12. Auto-Layout 的各种坑Unable to create description in descriptionForLayoutAttribute_layoutItem_coefficient. Something is nil&#39;
  13. 【SSRS】入门篇(七) -- 报表发布
  14. Pytest(一)
  15. Java 8 函数式接口
  16. ILMerge合并多个DLL (转)
  17. Python3 系列之 环境配置篇
  18. 国内代码托管git-osc基础使用教程
  19. python的接口和抽象类
  20. EOS主网节点部署

热门文章

  1. 2019了,给自己立一个flag吧
  2. 【ABAP系列】SAP ABAP诠释BDC的OK CODE含义
  3. Nginx https服务器证书安装步骤
  4. mysql5.7日志时间与系统时间不一致
  5. SpringBoot(二) -- SpringBoot配置
  6. Java 中的 T,E,K,V, 别傻傻分不清楚!
  7. HDU 1880 题解(字符串哈希)
  8. 小白学Python(17)——pyecharts 日历图 Calendar
  9. (三:NIO系列) Java NIO Channel
  10. mysql中,表与表之间的关系