C 可怕的宇宙射線

2021-10-04 03:49:19 字數 1387 閱讀 7578

宇宙射線會在無限的二維平面上傳播(可以看做乙個二維網格圖),初始方向預設向上。宇宙射線會在發射出一段距離後**,向該方向的左右45°方向**出兩條宇宙射線,同時威力不變!宇宙射線會**n 次,每次**後會在**方向前進 ai個單位長度。求有多少個位置會被打擊。

輸入第一行包含乙個正整數n(n<=30) ,表示宇宙射線會**n次。

第二行包含n個正整數a1,a2…an,第 i個數ai 表示第 i次**的宇宙射線會在它原方向上繼續走多少個單位長度。輸出乙個數 ans,表示有多少個位置會被打擊。

輸入樣例:

4

4 2 2 3

輸出樣例:

例題圖示:

利用乙個容器set,可以保證點的唯一性。因為每次**有明顯的對稱性,所以可以每次只向一邊**然後另一邊的點不再需要計算直接對稱,本解法向右**。設向上的方向為0,順時針為1234567。對於乙個點的有效資訊是橫縱座標,到達這個點之前的方向,該點屬於哪一層。

利用遞迴的思想深入到最後一層之後,開始返回,首先將轉折點存入set然後再把對稱點也存進去,再把上乙個轉折點到這個點途徑的點都存進去。最後set中點的個數就是被打擊的點的個數。

#include

#include

#define n 35

using

namespace std;

struct point

bool

operator

<

(const point& p)

const};

int n =0;

int a[n]

;set sec;

void

fun(point p,

int index =0,

int dir =0)

else

if(dir ==1)

else

if(dir ==2)

else

if(dir ==3)

else

if(dir ==4)

else

if(dir ==5)

else

if(dir ==6)

else

if(dir ==7)

sec.

insert

(st.

begin()

, st.

end())

;switch

(dir)

//存入打擊點

}int

main()

可怕的宇宙射線

題意 宇宙射線會在無限的二維平面上傳播 可以看做乙個二維網格圖 初始方向預設向上。宇宙射線會在發射出一段距離後 向該方向的左右45 方向 出兩條宇宙射線,同時威力不變。宇宙射線會 n次,每次 後會在 方向前進ai 個單位長度。計算出共有多少個位置會被打擊。輸入 輸入第一行包含乙個正整數n n 30 ...

可怕的宇宙射線 dfs 剪枝

寫在前面 對於這個問題,首先我們可以採用暴力bfs或者dfs,但是這種演算法的複雜度是指數級的,如果考慮 30次,那麼它的迴圈次數是2 302 230,如果在正規比賽中肯定會超時,在詢問了大佬之後,這個問題可以採用dfs加上剪枝來解決,這裡和大家分享一下 在浩瀚的宇宙中,存在著1種生物,這種生物可以...

CSP模擬 題目C 可怕的宇宙射線

眾所周知,瑞神已經達到了cs本科生的天花板,但殊不知天外有天,人外有苟。在浩瀚的宇宙中,存在著 種叫做苟狗的生物,這種生物天生就能達到人類研究生的知識水平,並且天生擅長csp,甚至有全國第一的水平 但最可怕的是,它可以發出宇宙射線 宇宙射線可以摧毀人的智商,進行降智打擊 宇宙射線會在無限的二維平面上...