为什么换成前缀会wa,有没有佬能点醒一下我想不通
查看原帖
为什么换成前缀会wa,有没有佬能点醒一下我想不通
917659
Slf_楼主2023/12/24 17:18

这是ac了的,一个前缀记录,一个用后缀记录

int a[N];
int z[N],f[N];//正负
 
void solve() {
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		z[i] = f[i] = 0;
	}
	int res = inf;
	f[1] = 1;
	for(int i=2;i<=n;i++){
		f[i] = f[i-1];
		if(a[i] >= a[i-1]) f[i]++;
	}
	
	for(int i=n-1;i>=1;i--){
		z[i] = z[i+1];
		if(a[i] >= a[i+1])z[i]++;
	}
	
	for(int i=1;i<=n+1;i++){//枚举负正边界
		res = min(res,f[i-1]+z[i]);
	}
	cout<<min(res,min(f[n],z[1]))<<endl;
}

这是都用前缀记录的wa了,感觉思路一样啊

int a[N];
int z[N],f[N];//正,负 

void solve() {
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		z[i] = f[i] = 0;
	}
	int res = inf;
	f[1] = 1;
	for(int i=2;i<=n;i++){
		z[i] = z[i-1];
		f[i] = f[i-1];
		if(a[i] < a[i-1]){
			z[i]++;
		}
		else if(a[i] > a[i-1]) f[i]++;
		else {
			z[i]++;f[i]++;
		}
	}
	
	for(int i=1;i<=n+1;i++){
		res = min(res,f[i-1]+z[n]-z[i]);
	}
	cout<<min(res,min(f[n],z[n]))<<endl;
}
2023/12/24 17:18
加载中...