玄关,帮忙卡个常
  • 板块灌水区
  • 楼主aike_6yoshi9
  • 当前回复8
  • 已保存回复8
  • 发布时间2024/11/1 19:41
  • 上次更新2024/11/1 21:46:42
查看原帖
玄关,帮忙卡个常
1125690
aike_6yoshi9楼主2024/11/1 19:41

题面链接
luogu能过,但是学校评测机T98

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#define rep(n) for(i=1;i<n;i++)
#include<cstdio>
#include<cstring>
using namespace std;
inline char gtchar() {
	static char buf[1000005], *p1 = buf, *p2 = buf;
	return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1000005, stdin), p1 == p2)? EOF: *p1++;
}
inline int read() {
	char ch = gtchar();
	int ret = 0;
	bool t1 = 0;
	while(ch < '0' || ch > '9') t1 |= ch == '-', ch = gtchar();
	while(ch >= '0' && ch <= '9') ret = ret * 10 + (ch ^ 48), ch = gtchar();
	return t1? -ret: ret;
}
const int MAXN=1e6+10;
long long n,c,f,ans,b[MAXN],s[MAXN],r[MAXN];
long long p[MAXN],u[MAXN],x[MAXN],y[MAXN],i,tmp;
bool flag;
signed main(){
    n=read();
	rep(n+1) b[i]=read();
	rep(n) p[i]=read();
	rep(n) u[i]=read();
	rep(n){
		p[i]>=(b[i]-y[i-1])?(p[i]-=(b[i]-y[i-1]),x[i]=(b[i]-y[i-1])):(x[i]=p[i],p[i]=0);
		p[i]>=u[i]?(p[i]-=u[i],r[i]=u[i]):(r[i]=p[i],p[i]=0);
		p[i]>b[i+1]?flag=1:(y[i]=p[i],p[i]=0);
	}
	if(flag) puts("NO");
	else{
		puts("YES");
		for(i=n-1;i;--i){
			tmp=b[i+1]-y[i]-x[i+1];
			tmp<=r[i]?(r[i]-=tmp,y[i]+=tmp,tmp=0):(tmp-=r[i],y[i]+=r[i],r[i]=0);
			tmp<=x[i]?(x[i]-=tmp,y[i]+=tmp):(y[i]+=x[i],x[i]=0);
		}
		rep(n) ans+=r[i];
		printf("%lld\n",ans);
		rep(n) printf("%lld %lld %lld\n",x[i],r[i],y[i]);
	}
}

代码思路来源于tj第一篇dalao的思路,本来写的if但是为了卡常又改回去了

2024/11/1 19:41
加载中...