俗话说的好,兔子不吃窝边草。
村子里有 n 个兔子窝,它们窝门口有 ai 颗萝北。
秉持着一个原则就是不吃窝边草。
假如一只兔子吃一个萝北,那么一共有多少兔子能吃得着萝北。
输入格式:
第一行输入由一个整数 T(1≤T≤25) 组成,表示测试用例的数量。
每个测试用例以一个整数 n(1≤n≤106) 的行开始,即兔子窝的数量。
对于接下来的 n 行,每行包含两个整数 a,b(0≤a,b≤109),分别表示窝里兔子数和窝边萝北数。
保证所有测试用例的 n 之和不超过 6×106。
输出格式:
对于每个测试用例,将答案作为一个整数打印在一行中。
输入样例:
1
2
3 4
2 1
输出样例:
3
代码
#include <iostream>
#define int long long
using namespace std;
int a[1000010],b[1000010];
signed main()
{
int t,n;
cin>>t;
while(t--)
{
cin>>n;
int res=0,sum=0,t=0;//t表示已经吃了多少个萝卜,sum表示一共有多少个萝卜
for(int i=0;i<n;i++)
{
cin>>a[i]>>b[i];
sum=sum+b[i];
}
for(int i=0;i<n;i++)
{
res+=min(a[i],min(sum-b[i],sum-t));//sum-b[i]表示理想中可以吃的有多少,sum-t表
t=res; //示实际上可以吃多少,a[i]是这个窝有多少兔子
}
cout<<res<<endl;
}
return 0;
}