(算法練習)藍橋杯——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);
	}
	
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章