社区讨论

Wa在哪,出题人我爱死你了

P15289「YLLOI-R3-T4」止战之殇参与者 4已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@mljbw3ek
此快照首次捕获于
2026/02/12 18:41
7 天前
此快照最后确认于
2026/02/15 10:20
4 天前
查看原帖
悬棺。
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int ri=1e6+5;
int n,a,b[ri],d,cnt[ri],cnt1[ri],ans,ans1;
signed main(){
	cin>>n>>a>>d;
	for(int i=1;i<=n-1;i++){
		cin>>b[i];
		cnt[i]=cnt1[i]=(b[i]-2)/(2*d);
//		cout<<cnt[i]<<" "; 
	}
//	cout<<endl;
//	ans+=max(0ll,cnt[a]-1);
//	ans1+=max(0ll,cnt1[a]-1);
//	if(cnt[a]>1) cnt[a]=cnt1[a]=1;
//	else ans1++,ans++;
	int i=a;
	while(1<=i){
		if(i==1){
			ans+=cnt[1];
			cnt[1]=0;
			break;
		}
		if(cnt[i-1]<=1){
			if(cnt[i-1]<=0&&cnt[i-2]<=0){
				ans+=cnt[i];
				cnt[i]=0;
				break;
			}
			if(cnt[i-2]<=1&&i-2>=1){
				ans+=1;
				cnt[i-2]=0;
				i=i-2;
			}else if(i-2>=1){
				ans+=cnt[i-2]-1;
				cnt[i-2]=1;
				i=i-2;
			}else{
				break;
			}
		}else{
			ans+=cnt[i-1]-1;
			cnt[i-1]=1;
			i=i-1;
		}
    }
//    for(int i=1;i<=n-1;i++){
//		cout<<cnt[i]<<" "; 
//	}
//	cout<<endl;
    while(i<n){
    	if(i==n-1){
    		ans+=cnt[n-1];
			cnt[n-1]=0;
			break;
		}
//		if(cnt[i+1]<=0&&cnt[i+2]<=0){
//			ans+=cnt[i];
//			cnt[i]=0;
//			break;
//		}
		if(cnt[i+1]>0){
			ans+=cnt[i+1];
			cnt[i+1]=0;
			i+=1;
			continue;
		}
		else if(cnt[i+2]>0&&i+2<n){
			ans+=cnt[i+2];
			cnt[i+2]=0;
			i=i+2;
	    }else{
	    	break;
		}
    }
//    for(int i=1;i<=n-1;i++){
//		cout<<cnt[i]<<" "; 
//	}
//	cout<<endl;
    i=a;
    while(i<n){
    	if(i==n-1){
    		ans1+=cnt1[n-1];
			cnt1[n-1]=0;
			break;
		}
		if(cnt1[i+1]<=1){
			if(cnt1[i+1]<=0&&cnt1[i+2]<=0){
				ans1+=cnt1[i];
				cnt1[i]=0;
				break;
			}
			if(cnt1[i+2]<=1&&i+2<n){
				ans1+=1;
				cnt1[i+2]=0;
				i=i+2;
			}else if(i+2<n){
				ans1+=cnt1[i+2]-1;
				cnt1[i+2]=1;
				i=i+2;
			}else{
				break;
			}
		}else{
			ans1+=cnt1[i+1]-1;
			cnt1[i+1]=1;
			i=i+1;
		}
    }
    while(1<=i){
    	if(i==1){
			ans1+=cnt1[1];
			cnt1[1]=0;
			break;
		}
//		if(cnt1[i-1]<=0&&cnt1[i-2]<=0){
//			ans1+=cnt1[i];
//			cnt1[i]=0;
//			break;
//		}
		if(cnt1[i-1]>0){
			ans1+=cnt1[i-1];
			cnt1[i-1]=0;
			i-=1;
		}else if(cnt1[i-2]>0&&i-2>=1){
			ans1+=cnt1[i-2];
			cnt1[i-2]=0;
			i=i-2;
	    }else{
	    	break;
		}
    }
//    cout<<ans<<" "<<ans1<<endl; 
    cout<<max(ans1,ans)<<endl;
	return 0;
}

回复

7 条回复,欢迎继续交流。

正在加载回复...