AGC049 题解&总结

AGC仍旧是那么毒瘤……

%%%gmh77


A

干了1h多都干不出来,自闭……

https://www.cnblogs.com/jz-597/p/13975626.html

B

操作相当于:选择某个(1),将其左移一位,如果左边也有(1)就抵消。

从左往右扫,把遇到的(T)(1)搞个队列,遇到的(S)(1)就先尝试配对队列中第一个,如果队列为空就尝试消掉前面一个未配对的。

C

WA了4次最后10min内交的……

可以发现:对于编号(i),两种情况:要么(i)一直向左走完全程,要么(i)没有开始走就被摧毁了。

可以直接贪心让每个都走完全程,除了走完全程会到达(0)的。接下来就会形成一些空隙,存在一些走完全程到达(0)的没有被覆盖。让它合法有两种方法:1. 让后面的延长覆盖它。2. 将自己缩短到不会覆盖(0)

选了第二种方法后,前面的都不用考虑了。所以直接枚举选第二种方法的是哪个,后面的都用第一种方法。

注意缩短自己时也能补足他人,所以是取max。

using namespace std;
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <climits>
#define N 200005
#define INF 1000000000
#define ll long long
int n;
ll a[N],b[N];
int main(){
	scanf("%d",&n);
	for (int i=1;i<=n;++i) scanf("%lld",&a[i]);
	for (int i=1;i<=n;++i) scanf("%lld",&b[i]);
	ll l=a[n]+1,sum=0,ans=LLONG_MAX;
	for (int i=n;i>=1;--i){
		if (a[i]-b[i]>0)
			l=min(l,a[i]-b[i]);
		else{
			ans=min(ans,max(sum,b[i]-a[i]+1));
//			ans=min(ans,sum+b[i]-a[i]+1);
			if (a[i]<l){
//				printf("%d
",a[i]);
				sum++;
//				sum+=l-a[i];
				l=a[i];
			}
		}
	}
	ans=min(ans,sum);
	printf("%lld
",ans);
	return 0;
}

D

https://www.cnblogs.com/jz-597/p/13992257.html


  1. 对于AGC这种神仙比赛,A题不一定是最水的,有可能一直做不出来。所以要学会尽快换题看看。
  2. 然而A题可能实际上也很水,这考验换角度思考的能力。
  3. 细节想清楚再交,不然罚时很惨烈。
  4. 比赛的时候千万不要把gmh77的做题进度放在心上,会扰乱心态。
原文地址:https://www.cnblogs.com/jz-597/p/13992262.html