求助思路正确但程序运行不了
查看原帖
求助思路正确但程序运行不了
36263
阿正楼主2020/9/30 22:41
#include<bits/stdc++.h>
using namespace std;

struct node{
	int begin,end;
	int mlen;
}maxn;

int a[100005];
int n;
int ans=0;
bool flag=0;


void pd2(){//判断是否全部填满 
	int cnt3=0;
	for(int i=1;i<=n;i++){
		if(a[i]==0)
			cnt3++;	
	}
	if(cnt3==n)
		flag=1;
	return;
} 

void work2(){//更新 
	if(maxn.mlen!=0){
		ans++;//次数加一 
		for(int i=maxn.begin;i<=maxn.end;i++)
			a[i]-=1;
		maxn.mlen=0;//初始化		
	}
	return;		 
}


void scan1(){//扫描第一个最长的字串出现的位置及长度 
	int cnt2=0;
	for(int i=1;i<=n;i++){
		if(a[i]!=0)
			cnt2++;
		else if(a[i]==0&&cnt2!=0){
			if(cnt2>maxn.mlen){
				maxn.begin=i-cnt2;
				maxn.mlen=cnt2;
				maxn.end=i;
				cnt2=0;
			}
		}
	} 
	work2(); 
	return;
}

void work1(){//work解决 
	ans++;
	for(int i=1;i<=n;i++)
		a[i]=a[i]-1; 
	
	return;
}

void pd1(){//判断该选哪套方案 
	int cnt1=0;
	
	for(int i=1;i<=n;i++)
		if(a[i]!=0)
			cnt1++; 
			
		if(cnt1==n){//如果全是坑 
			work1();//直接work解决
			return;
		}
			
		else{
			scan1();//如果有填好的,先去扫描 
			return;
		}
			
}

int main(){
	scanf("%d",&n);
	
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
		
	maxn.mlen=0;
		
	while(flag!=1){
		pd1();
		pd2();
	}
	
	printf("%d\n",ans);
	
	return 0;
}

求助大神帮忙看看哪里出错误了,万分感谢!!

2020/9/30 22:41
加载中...