请hack我
查看原帖
请hack我
234282
鸽子爱咕咕楼主2022/1/28 23:35

我的这一份代码样例和手造数据都对了,但是交上去只有33pts,请dalao们手造几个小数据hack我帮助调试,感激不尽!

#include <iostream>
#include <cstdio>
using namespace std;
const int N=1e5+10;

int n,cnt,maxx;//cnt:冰期总数,maxx:最长冰期长度
int a[N];
int last[N],start[N],end[N];//last[i]表示第i个冰期持续的时间,start[i]表示第i个冰期开始时间,end[i]表示结束

int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;++i) scanf("%d",&a[i]);
	a[++n]=0;
	
	a[0]=0,start[0]=1;
	for(int i=1;i<=n;++i){
		if(a[i]<0){
			if(a[i-1]>=0) start[++cnt]=i;//一个冰期开始了!
			++last[cnt];
		} else if(a[i]>=0 && a[i-1]<0){//一个冰期结束了!
			end[cnt]=i;
			maxx=max(maxx,end[cnt]-start[cnt]);
		}
	}
	
	int ans=0;
	for(int i=1;i<=cnt;++i)
		ans+=min(2*(end[i]-start[i]),start[i]-start[i-1]);
	
	int sum=0;
	for(int i=1;i<=cnt;++i){
		if(end[i]-start[i]==maxx && min(3*(end[i]-start[i]),start[i]-start[i-1]) > min(2*(end[i]-start[i]),start[i]-start[i-1]))
			sum=max(sum,min(3*(end[i]-start[i]),start[i]-start[i-1])-min(2*(end[i]-start[i]),start[i]-start[i-1]));
	}
	
	cout<<ans+sum;
	return 0;
}

2022/1/28 23:35
加载中...