NPSC補完計劃

登入註冊帳號.

請輸入帳號, 密碼以及預計登入時間
進階搜尋  

最新消息:

歡迎光臨NPSC補完計劃

+ NPSC補完計劃 » NPSC國中組 » NPSC2004國中組初賽
 D 碰碰狸歷險記

作者 主題: D 碰碰狸歷險記  (閱讀 496 次)

rscpp

  • 中級會員
  • ***
  • 文章數: 60
    • 檢視個人資料
D 碰碰狸歷險記
« 於: 四月 19, 2015, 11:27:43 am »

代碼: [選擇]
// npsc04-j1d 碰碰狸歷險記
// 六角形每邊長1、中心點至各頂點為1、中心至邊的垂直距 sqrt(0.75)=0.8660254
// 上下移 (0,±1.73205) 、 斜線移( ±1.5 , ±0.86603)、橫移需成對的斜移來完成
// 先斜移至x軸或y軸(min(x/1.5, y/0.86603) ),再直接算橫移的步數(x/1.5)或直移的步數(y/1.73205)
// 直接將輸入的 x,y 取絕對值÷1.5及÷0.8660254後四捨五入取整數步數來處理
*/
#include <iostream>
#include <cmath>
using namespace std;
const double sx=1.5 , sy=0.8660254;
int main()
{
double dx,dy;
int n;
int x,y,m,ans;
while( cin >> n )
{
while(n--)
{
cin >> dx >> dy;
x = int(fabs(dx)/sx+0.5); //轉成以 1.5 為單位的步數
y = int(fabs(dy)/sy+0.5); //轉成以 0.8660254 為單位的步數
m = min(x,y);  //斜移至軸線的步數
ans = m+1 + max(x-m, (y-m)/2);
// cout <<"x,y,m: ans"<<x<<","<<y<<","<<m<<": "
cout << ans << endl;
}
}


  return 0;
}
/*
---------------範例輸入:
2
1.5 0.866
4.5 4.330
3
1.5 6.062178
6 3.464102
7.5 2.598076
1
-4.5 0.866
-----------------範例輸出:
2
5
5
5
6
*/
記錄
+ NPSC補完計劃 » NPSC國中組 » NPSC2004國中組初賽
 D 碰碰狸歷險記