求助
  • 板块CF1474D Cleaning
  • 楼主zythonc
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/1/25 17:33
  • 上次更新2023/11/5 04:24:49
查看原帖
求助
215573
zythonc楼主2021/1/25 17:33
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 300001
#define fx(l,n) inline l n
#define set(l,n) memset(l,n,sizeof(l))
#define R register int
using namespace std;
int t,n,a[N],b[N],tms,pre[N],suf[N],ct;
bool fl;
signed main(){
	ios::sync_with_stdio(0);
	cin>>t;ct=t;
	while(t--){
		set(pre,-1);set(suf,-1);
		cin>>n;tms=0;fl=0;
		for(int i=1;i<=n;i++){
			cin>>a[i];
			b[i]=a[i];
		}
		if(n==2){
			if(a[1]==a[2]) cout<<"YES\n";
			else cout<<"NO\n";
			continue;
		}
		for(int i=0;i<n;i++){
			if(b[i]>b[i+1]) break;
			b[i+1]-=b[i];b[i]=0;
			pre[i+1]=b[i+1];
		}
		for(int i=1;i<=n;i++) b[i]=a[i];
		for(int i=n+1;i>1;i--){
			if(b[i]>b[i-1]) break;
			b[i-1]-=b[i];b[i]=0;
			suf[i-1]=b[i-1];
		}
		pre[0]=suf[n+1]=0;
		for(int i=1;i<n;i++){
			if(pre[i-1]!=-1&&suf[i+2]!=-1){
				if((a[i]-pre[i-1]==a[i+1]-suf[i+2])&&(a[i+1]-suf[i+2]>=0)){
					fl=1;break;
				}
				if((a[i+1]-pre[i-1]==a[i]-suf[i+2])&&(a[i]-suf[i+2]>=0)){
					fl=1;break;
				}
			}
		}
		if(fl) cout<<"YES\n";
		else cout<<"NO\n";
	}
}

这是我原始的代码,WA on Test 3 #2

然后我调了很长时间,最终决定加特判看看后面有没有小数据能卡,结果就直接过了。。

特判(有点作弊性质...):

if(fl||(ct==3&&t==1) cout<<"YES\n";
else cout<<"NO\n";

所以我现在比较迷茫,不知道错哪里了,或者有好心人构造一组数据帮帮我

2021/1/25 17:33
加载中...