80求助大佬帮忙,1不知道为啥红了
查看原帖
80求助大佬帮忙,1不知道为啥红了
454444
StenvenPig楼主2024/7/15 21:24
#include<bits/stdc++.h>
using namespace std;
int a[10],deep;
int x,y,z;
struct ND{
	int x,y,z;
};
ND read(){
	for(int i=1;i<=3;i++){
		cin>>a[i];
	}
	sort(a+1,a+4);
	x=a[1];
	y=a[2];
	z=a[3];
	return {x,y,z};
}
ND ini(ND nd,int &deep){
	deep=1;
	int d1=nd.y-nd.x,d2=nd.z-nd.y;
	while(d1!=d2){
		deep++;
		if(d1<d2){
			nd.y+=d1;
			nd.x+=d1;
		}else{
			nd.y-=d2;
			nd.z-=d2;
		}
		d1=nd.y-nd.x,d2=nd.z-nd.y;
	}
	return nd;
}
bool isSame(ND s1,ND s2){
	return (s1.x==s2.x and s1.y==s2.y and s1.z==s2.z);
}
ND up(ND nd,int step){
	while(step--){
		int d1=nd.y-nd.x,d2=nd.z-nd.y;
		if(d1!=d2){
			if(d1<d2){
				nd.y+=d1;
				nd.x+=d1;
			}else{
				nd.y-=d2;
				nd.z-=d2;
			}
		}
		
	}
	return nd;
	
}
int main(){
	int deep1;
	ND nd1=read();
	ND fa1=ini(nd1,deep1);
	int deep2;
	ND nd2=read();
	ND fa2=ini(nd2,deep2);
	if(isSame(fa1,fa2)){
		cout<<"YES"<<endl;
		if(deep1>deep2){
			nd1=up(nd1,deep1-deep2);
		}
		if(deep2>deep1){
			nd2=up(nd2,deep2-deep1);
		} 
		int tempde=0;
		while(!isSame(nd1,nd2)){
			tempde++;
			nd1=up(nd1,1);
			nd2=up(nd2,1);
		}
		if(deep1>deep2){
			cout<<deep1+deep2-2*(deep2-tempde);
		}
		if(deep1<deep2){
			cout<<deep1+deep2-2*(deep1-tempde);
		}
		
		
	}else{
		cout<<"NO";
	}
	return 0;
}
2024/7/15 21:24
加载中...