神必RE代码求调
查看原帖
神必RE代码求调
936123
chudequn楼主2023/8/2 12:14

样例(包括官网41行那个)全过了

我寻思着n<=1000n<=1000 数组开10100总不至于越界吧

难不成是栈溢出?

代码如下

#include<iostream>
#include<stack>
using namespace std;
stack <long long> z,b;
long long n,a[10100],j;
bool bj,bj1,c[10100];
int main(){
	while(1){
		cin>>n;
		if(n==0)	break;//当此数据点完成 
		for(int i=n;i>=1;i--)	b.push(i);//初始化A车站 
		while(1){
			for(int i=1;i<=n;i++){
				cin>>a[i];
				if(a[i]==0){//当此组数据完成 
					cout<<endl;
					bj1=1;
					break;
				}
			}
			if(bj1){
				bj1=0;
				break;
			}
			for(int i=1;i<=n;i++){
				if(c[a[i]]){//当目标车厢在C 
					if(z.top()!=a[i]){//当目标车厢在C且不在C顶时则一定无法把目标车厢移到指定位置 
						cout<<"No"<<endl;
						break;
					}
					else{//将目标移至B,不再考虑 
						z.pop();
						c[a[i]]=0;
					}
				}
				else{//当目标车厢在A 
					if(z.empty()){//防止栈空 
						z.push(b.top());
						c[b.top()]=1;
						b.pop();
					}
					while(z.top()!=a[i]){//贪心,持续将A中车厢移至C直到目标车厢在C顶部 
						z.push(b.top());
						c[b.top()]=1;
						b.pop();
					} 
					c[a[i]]=0;
					z.pop();
				}
			}
			if(z.empty())	cout<<"Yes"<<endl;//当C空时则所有车厢在指定位置 
			else{//重置栈 
				while(!z.empty())	z.pop();
				while(!b.empty())	b.pop();
				while(c[++j])	c[j]=0;
				j=0;//重置辅助变量 
			}
			for(int i=n;i>=1;i--)	b.push(i);//重置A车站 
		}
	}
	return 0;
}
2023/8/2 12:14
加载中...