如圖所示,可以將所有的操作歸結為:
第一步:將所有的forward操作一併做完,到達途中n軸上的一點。
第二步:將所有的left轉化為(360 - left)%360,即將所有的轉向操作都變成右轉,然後挑選這些右轉操作,最終目的是使得min夾角盡可能大,讓forward與backward夾角盡可能大,兩邊不變,兩邊夾角越大,第三邊(output)越大。
第三步:將所有的backward操作一併做完,到達終點。
第四步:將第二步遺留的所有轉向操作做完,原地轉向,並不改變位置。
第五步:計算output,並輸出。
數學公式:output = a∗a
+b∗b
−2∗a
∗b∗c
os(a
,b)\sqrt
a∗a+b∗
b−2∗
a∗b∗
cos(
a,b)
#include
#include
#include
#define pi acos(-1.0)
using
namespace std;
intmain()
else
if(input[0]
=='b'
)else
else
num ++;}
}int flag[
360]
;int reach[
360]
;memset
(flag,0,
sizeof
(flag));
flag[0]
=1;for
(int i =
0; i < num; i++)}
}int min =
180;
for(
int i =
0; i <
360; i++)}
}printf
("%.3lf\n"
,sqrt((
double
)forward*forward+
(double
)backward*backward-2*
(double
)forward*backward*
cos(
(double)(
180- min)
/180.0
*pi)))
;//一定將這三個變數先轉為double型別,不然直接計算最後轉double會答案錯誤
}return0;
}
北郵oj 最遠距離
題目 把所有能轉出的角度都列舉出來,然後找最接近180度的。另外計算浮點數一定要注意精讀,把int型轉為double型再計算!我找了一下午發現是因為這個沒有ac!include include define pi acos 1.0 using namespace std double dis dou...
最遠距離 北郵2012網研院複試上機題
記憶體限制 65536 kb 正義的夥伴褋祈和葬儀社的機械人fuyuneru正在被 的ghq部隊追殺。眼看著快要逃不掉了,祈就把重要的東西塞到了機械人體內,讓它先跑,自己吸引火力。假設fuyuneru帶上東西開始逃跑時所處的點為原點,朝向為正北。操縱fuyuneru的指令有如下四種 right x ...
樹上最遠距離練習
從二叉樹的節點a出發,可以向上或者向下走,但沿途的節點只能經過一次,當到達節點b時,路徑上的節點數叫作a到b的距離。對於給定的一棵二叉樹,求整棵樹上節點間的最大距離。給定乙個二叉樹的頭結點root,請返回最大距離。保證點數大於等於2小於等於500.對於給定的節點root,最遠距離只可能來自以下三種情...