(算法练习)蓝桥杯——X星球居民小区的楼房全是一样的

要求:
https://www.dotcpp.com/oj/contest2325_problem3.html

这题暂未AC,存个代码,有时间再来看看哪里的问题= =

#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;

int main(){
    
    
	int w,m,n;
	
	scanf("%d %d %d",&w,&m,&n);
	int numrecordlef[w];
	int numrecordrig[w];
	bool ans[w] = {
    
    false};
	
	int maxn = max(m,n);
	int minx = min(m,n);
	//int lef,rig;
	int signal = 0,pos = 0,path = 0;
	for(int i = 0;;i++){
    
    
		signal++;
		if(i*w+1<= minx && (i+1)*w >= minx){
    
       //在第i行 
			int linshinum = (i)*w+1;
			//printf("signal=%d\n",signal);
			if(signal%2 == 0){
    
       //偶数行,逆序 
				//printf("逆序\n");
				for(int s = w-1;s>=0;s--){
    
    
					numrecordlef[s] =  linshinum++;
					//printf("%d\n",numrecord[lef][s]);
					if(numrecordlef[s] == minx){
    
    
						ans[s] = true;
						//printf("s=%d\n",s);
					}
				}
			}
			else{
    
         //奇数行,正序 
				//printf("正序\n");
				for(int s = 0;s<w;s++){
    
    
					numrecordlef[s] =  linshinum++;
					//printf("%d\n",numrecord[lef][s]);
					if(numrecordlef[s] == minx){
    
    
						ans[s] = true;
						//printf("s=%d\n",s);
					}
				}
			}
			for(int j = i;;j++){
    
    
				signal++;
				pos++;   //记录走过多少行 
				
				if(j*w+1<= maxn && (j+1)*w >= maxn){
    
    
					int linshinumm = (j)*w+1;
					if((signal-1)%2 == 0){
    
       //偶数行,逆序 
						//printf("逆序\n");
						for(int s = w-1;s>=0;s--){
    
    
							numrecordrig[s] =  linshinumm++;
							if(numrecordrig[s] == maxn){
    
    
								ans[s] = true;
								//printf("s=%d\n",s);
							}
							//printf("%d\n",numrecord[rig][s]);
						}
					}
					else{
    
         //奇数行,正序 
						//printf("正序\n");
						for(int s = 0;s<w;s++){
    
    
							numrecordrig[s] =  linshinumm++;
							if(numrecordrig[s] == maxn){
    
    
								ans[s] = true;
								//printf("s=%d\n",s);
							}
							//printf("%d\n",numrecord[rig][s]);
						}	
					}
					
					break;
				}
			}
			break;
		}
		
	}
	int t1,t2,ss = 0;
	for(int i = 0;i <w;i++){
    
    
		if(ans[i] == true && ss == 0){
    
    
			t1 = i;
			//printf("%d\n",t1);
			ss++;
		}
		else if(ans[i] == true && ss >0){
    
    
			t2 = i;
			//printf("%d\n",t2);
			ss++;
		}
	}
	if(ss == 2){
    
    
		printf("%d",pos-1+abs(t1-t2));
	}
	else{
    
    
		printf("%d",pos-1);
	}
	
}


猜你喜欢

转载自blog.csdn.net/weixin_42377217/article/details/105036717