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\n",a[i]);
sum++;
// sum+=l-a[i];
l=a[i];
}
}
}
ans=min(ans,sum);
printf("%lld\n",ans);
return 0;
}
D
https://www.cnblogs.com/jz-597/p/13992257.html
- 对于AGC这种神仙比赛,A题不一定是最水的,有可能一直做不出来。所以要学会尽快换题看看。
- 然而A题可能实际上也很水,这考验换角度思考的能力。
- 细节想清楚再交,不然罚时很惨烈。
- 比赛的时候千万不要把gmh77的做题进度放在心上,会扰乱心态。