Educational Codeforces Round 85 C. Circle of Monsters(贪心)
思路:考虑每个怪物对答案的贡献,若前一个能炸死当前怪物则对答案无贡献,否则贡献为其差值,除此外我们还需选取一个最小的第一个子弹打死的怪物,通过分别在被炸死的怪物和没被炸死怪物中取最小值即可。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=3e5+5;
ll a[N],b[N];
int main(){
int t;
scanf("%d",&t);
while(t--){
ll n,ans=0,mn=1e14;
scanf("%lld",&n);
for(int i=1;i<=n;i++) scanf("%lld%lld",&a[i],&b[i]);
a[n+1]=a[1],b[n+1]=b[n];
for(int i=2;i<=n+1;i++)
if(a[i]>b[i-1]) ans+=a[i]-b[i-1],mn=min(mn,b[i-1]);
else mn=min(mn,a[i]);
printf("%lld\n",ans+mn);
}
return 0;
}