题意
一共有n(<=1e6)个班级,第i个班级有a[i]个同学,b[i]杯奶茶。每个班的同学不能喝自己班的奶茶,问n个班最多喝几杯奶茶。
题目链接
思路
考虑每个班的奶茶是否会浪费,浪费指的是其他所有班都喝某一个班的奶茶也喝不完。若有浪费,则让其他班的同学都来喝这个班的奶茶,这个班的同学喝所有其他班的奶茶。若没有浪费,则答案为奶茶总数和总人数的最小值。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 1000000+10;
int n;
int a[maxn],b[maxn];
int main()
{
int T;
scanf("%d",&T);
while (T--)
{
scanf("%d",&n);
for (int i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]);
LL suma=0,sumb=0;
for (int i=1;i<=n;i++) suma+=a[i],sumb+=b[i];
LL ans=0;
bool jud=0;
for (int i=1;i<=n;i++)
{
if (suma-a[i]<=b[i])
{
ans=max(ans,suma-a[i]+min((LL)a[i],sumb-b[i]));
jud=1;
}
}
if (!jud)
{
ans=min(suma,sumb);
}
printf("%lld
",ans);
}
return 0;
}