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;
}