#23546: 選擇方法(非最佳解)


jllkii123 (Zammad)

學校 : Massachusetts Institute of Technology
編號 : 103341
來源 : [140.128.136.154]
最後登入時間 :
2022-08-30 16:25:38
b944. 好想上廁所(男廁篇) | From: [36.237.21.57] | 發表日期 : 2020-11-26 21:52

1.我第一眼看到想到的方法:由第一個小便斗開始,走奇數號,之後往下+2,直到+2後會超過長度為止,接下來改成走偶數號,走到底若都全滿輸出"Not enough"

 *結果這樣馬上出現一個顯著的BUG,就是假如1跟2都有人,則1跳3的時候就會馬上成立,而不會考慮2是否有人。

 

2.經過修改之後改成由第一個開始,然後除了頭尾以外,每個位置都判斷前後是否有人,若有人則持續判斷直到尾端為止,接下來第二輪才開放有位置就成立,這樣就沒問題了

                                if(temp==0 && (aa[temp][0]==0 && aa[temp+1][0]==0)){  //第一個位置只需要判斷後面一個是否有人

aa[temp][0]=b;

aa[temp][1]=c;

break;

}else if(temp==a-1&& (aa[temp][0]==0 &&aa[temp-1][0]==0)){  //最後一個位置只需判斷前一個是否有人

aa[temp][0]=b;

aa[temp][1]=c;

break;

}else if(aa[temp][0]==0 && (aa[temp-1][0]==0 && aa[temp+1][0]==0)){  //中間必須兩方都判斷

aa[temp][0]=b;

aa[temp][1]=c;

break;

}else if(aa[temp][0]==0 && sum==1){  //如果控制閘(sum)打開時,代表已經執行過一輪了,這時候有空位就可以進

aa[temp][0]=b;

aa[temp][1]=c;

break;

}else if(temp+1>a-1 && sum==1){  //控制閘打開並執行到底,代表全滿

cout<<"  Not enough\n";

break;

}else if(temp+1>a-1){  //執行一輪後打開控制閘

temp=0;sum=1;continue; 

}

temp++;

 
ZeroJudge Forum