玄学RE求调
  • 板块灌水区
  • 楼主Misty_Post
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/18 16:29
  • 上次更新2024/10/18 16:30:02
查看原帖
玄学RE求调
755789
Misty_Post楼主2024/10/18 16:29

只是有点问题求解决,只求分析(解决玄关)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,a[2000000],qz[2000000];
ll jo[2000000];//奇数的奇偶性
ll sumo1[2000000];//偶数数量(从下自上)
ll oj[2000000],oo[2000000],oop[2000000],ojj[2000000];//上一个奇数,下一个偶数 ,上一个偶数 
bool cmp(ll x,ll y){
	return x>y;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	} 
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++){
		qz[i]+=a[i]+qz[i-1];
		if(a[i]%2==1){
			jo[i]=jo[i-1]^1;
			oj[i]=a[i];
			oop[i]=oop[i-1];
		}
		else{
			jo[i]=jo[i-1];
			oj[i]=oj[i-1];
			oop[i]=a[i];
		}
	}
	for(int i=n;i>=1;i--){
		if(a[i]%2==0){
			oo[i]=a[i];
			sumo1[i-1]=sumo1[i]+1;//就是说,如果sumo[i]<2则不成立 
			ojj[i-1]=ojj[i];
		}
		else{
			oo[i]=oo[i+1];
			ojj[i-1]=a[i];
			sumo1[i-1]=sumo1[i];
		}
	}
	ll m,x;
	cin>>m;
	for(int i=1;i<=m;i++){
		cin>>x;
		ll ans=qz[x];
		if(jo[x]==1){
			cout<<ans<<endl;
		}
		else{
			ll s=-1e9,ss=-1e9;
			if(sumo1[x]>=2&&oj[x]){
				s=0;
				s+=oo[x]+oo[oo[x]+1];
				s-=oj[x];
			}
			if(oop[x]&&ojj[x]){//上面有偶数,下面有奇数
				ss=0;
				ss-=oop[x];
				ss+=ojj[x]; 
			}
			ll rp=max(s,ss);
			if(s<-100&&ss<-100){//here
				cout<<-1<<endl;
			}
			else{
				cout<<ans+max(s,ss)<<endl;
			}//to here
		}
	}
}

如果注释掉

if(s<-100&&ss<-100){
	cout<<-1<<endl;
}
else{
	cout<<ans+max(s,ss)<<endl;
}

就不会RE

求分析为什么

2024/10/18 16:29
加载中...