手搓没发现问题,WA,求大佬debug
查看原帖
手搓没发现问题,WA,求大佬debug
1121910
dy_withlife楼主2024/8/10 12:03
#include<iostream>
#include<cstdio>
#include<string>
#include<vector>

std::vector <std::string> place;
int num[256];

void numout(){
	for(int i=0;i<256;i++){
		num[i]=0;
	}
}

bool ok(std::string s1,std::string s2){
	if(s1.size()!=s2.size())return false;
	else {
	for(int i=0;i<s1.size();i++){
		if(s1[i]!=s2[i])return false;
	}
	}
	return true;
}

//在vector中检测是否有重复的 
bool v_find(std::string s,int l){
	if(l==0)return true;
//	std::cout<<"  V_findok  ";
//	std::cout<<"now size ="<<l;
	for(int i=0;i<=l-1;i++){
		if( ok(s,place[i]) ){//std::cout<<"false";
			return false;
		}

	}
	return true;
}

//字符串转数字函数
int stonum(std::string s){
	int l=s.size();
	int point=1,sum=0;
	for(int i=l-1;i>=0;i--){
		sum=sum+int(s[i]-'0')*point;
		
	point*=10;}
	return sum;	
} 

//位置字符串"比大小"bool函数              
bool against(std::string s1,std::string s2){
	//前面的小吗?
	if(s1==s2)return false;
	if(s1.size()<s2.size() )return true; 
	if(s1.size()>s2.size())return false;
	for(int i=0;i<s1.size();i++){
		if(s1[i]!=s2[i]){
			if(s1[i]=='L')return true;
			else return false;
		}
	}
	
}
//vector和数组同时移动参数函数(同步函数) 

// 排序位置函数 
void s_sort(int l){
	for (int i = 0; i < l-1; i++) {
        for (int j = 0; j < l-1 - i; j++) {
            if ( against(place[j+1],place[j] ) ) {        // 相邻元素两两对比
                int temp = num[j+1];        // 元素交换
                num[j+1] = num[j];
                num[j] = temp;
                std::string s=place[j+1];
                place[j+1]=place[j];
                place[j]=s;                
            }
        }
    }
//	for(int i=0;i<l;i++)std::cout<<place[i]<<' ';
}



int main(){
freopen("practive.in","r",stdin);
//freopen("practive.out","w",stdout)
	 int now,last;
	 std::string places=" ";
	 std::string nums=" ";
	 nums.clear();
	 places.clear();
	 int size=0;
	 int root=-1;
	 bool again=false;
	 int nothing=0;
	 numout();
	 while ( (now=getchar())!=EOF ){
	if(last=='1'){
		last='(';continue;
	}
	if(last=='('&&(now==' '||now=='\n')){
		continue;
	}
	if(last=='('&&now=='('){
		continue;
	}	
	if(last=='('&&now==')'){
	//	std::cout<<"size="<<size;
//		std::cout<<"place[0]"<<place[0];
//		std::cout<<"num[0]="<<num[0];
	if(root==-1||again==true)std::cout<<-1<<'\n';		
	else {std::cout<<root;	s_sort(size);
	for(int i=0;i<size;i++)	std::cout<<' '<<num[i];	
	std::cout<<'\n';
	}
	
	nothing=0;
	again=false;last='(';root=0;size=0;nums.clear();places.clear();place.clear();numout();continue;}//排序后输出二叉树 
	if(again==true){
//		std::cout<<"again=-1;"; 
		last=now;
		continue;
	}
	
	 if(last=='('){
	 	if(now==','){
//	 	std::cout<<"now==','j";
		 	last=now;continue;
		 }
		 
		 nums+=(char)now;
	continue;}//数字 (全触发)
	
	
	
	 if(last==','){
//	std::cout<<"last=,";
	if(now==' '||now=='\n'){
	//	std::cout<<"now==' '";
	root=stonum(nums);nums.clear();places.clear();last='1';continue;
	}
	if(now==')'){
		//if(last=='(')continue;
//		std::cout<<"now==')'";
	if( v_find(places,size) ) {
//	std::cout<<"get";
		place.push_back(places);num[size]=stonum(nums);size=size+1;nums.clear();places.clear();
	//std::cout<<"win";
	}
	else {
		//std::cout<<"again=true;";
		again=true;
	} 
		//std::cout<<"last=(";
	last='1';continue;
}
	 places+=char(now);
//	 std::cout<<places;	
	continue;}//位置 
	//目前整个位置判断都没触发
	//last==','触发了 
	
	 
	 
	 
	 if(nothing==0){last=now;nothing=1;
	 }
	 //last=now;
	 }
	return 0;
}
2024/8/10 12:03
加载中...