RE求助
查看原帖
RE求助
127925
Kio_楼主2021/11/18 08:27

RT,空间已开大仍RE,求助;w;

#include<cstdio>
#include<cstring>
#define fmin cyxakioi1
#define fmax cyxakioi2

using namespace std;

const int N = 1000020;

inline bool isd(int c){return '0'<=c&&c<='9';}
int read(){
	int num,c,f=1;
	for(;!isd(c=getchar());f=c);
	for(num=c^48;isd(c=getchar());(num*=10)+=c^48);
	return f^45?num:-num;
}

int n,dfn;
char s[N];
int fmax[N][5], fmin[N][5];

inline int min(int a,int b){return a<b?a:b;}
inline int max(int a,int b){return a>b?a:b;}

void dfs(int x){
	if(x>n) return;//不加RE,加WA 
	if(s[x]=='0'){
		fmin[x][0] = fmax[x][0] = 1;
		return;
	}
//	printf("%d\n",dfn);
	fmin[x][0] = fmin[x][1] = fmin[x][2] = 1e9;
	int lson = ++dfn;
	dfs(dfn);

	if(s[x]=='1'){
		fmax[x][0] = max(fmax[lson][1],fmax[lson][2]) + 1;
		fmax[x][1] = max(fmax[lson][0],fmax[lson][2]);
		fmax[x][2] = max(fmax[lson][0],fmax[lson][1]);
		
		fmin[x][0] = min(fmin[lson][1],fmin[lson][2]) + 1;
		fmin[x][1] = min(fmin[lson][2],fmin[lson][0]);
		fmin[x][2] = min(fmin[lson][0],fmin[lson][1]);
	}
	else{
		int rson = ++dfn;
		dfs(dfn);
		fmax[x][0] = max(fmax[lson][1] + fmax[rson][2], fmax[lson][2] + fmax[rson][1]) + 1;
		fmax[x][1] = max(fmax[lson][0] + fmax[rson][2],fmax[lson][2] + fmax[rson][0]);
		fmax[x][2] = max(fmax[lson][1] + fmax[rson][0],fmax[lson][0] + fmax[rson][1]);
		
		fmin[x][0] = min(fmin[lson][1] + fmin[rson][2], fmin[lson][2] + fmin[rson][1]) + 1;
		fmin[x][1] = min(fmin[lson][0] + fmin[rson][2], fmin[lson][2] + fmin[rson][0]);
		fmin[x][2] = min(fmin[lson][1] + fmin[rson][0], fmin[lson][0] + fmin[rson][1]);
	}
}

int main(){
	scanf("%s",s+1); n = strlen(s+1);
	dfs(1);
	printf("%d %d\n",fmax[1][0], min(fmin[1][0], min(fmin[1][1],fmin[1][2])));
	return 0;
}

2021/11/18 08:27
加载中...