眾所周知,瑞神已經達到了cs本科生的天花板,但殊不知天外有天,人外有苟。在浩瀚的宇宙中,存在著一種叫做苟狗的生物,這種生物天生就能達到人類研究生的知識水平,並且天生擅長csp,甚至有全國第一的水平!但最可怕的是,它可以發出宇宙射線!宇宙射線可以摧毀人的智商,進行降智打擊!宇宙射線會在無限的二維平面上傳播(可以看做乙個二維網格圖),初始方向預設向上。宇宙射線會在發射出一段距離後**,向該方向的左右45°方向**出兩條宇宙射線,同時威力不變!宇宙射線會** 次,每次**後會在**方向前進ai個單位長度。現在瑞神要帶著他的小弟們挑戰苟狗,但是瑞神不想讓自己的智商降到普通本科生zjm那麼菜的水平,所以瑞神來請求你幫他計算出共有多少個位置會被"降智打擊"。
輸入說明
輸入第一行包含乙個正整數 n(n<=30),表示宇宙射線會**n 次第二行包含n個正整數a1,a2···an ,第ai(ai<=5)個數表示第 i次**的宇宙射線會在它原方向上繼續走多少個單位長度
輸出說明
輸出乙個數ans ,表示有多少個位置會被降智打擊
樣例輸入
44 2 2 3
樣例輸出
39思路
本題利用dfs剪枝的方式做。首先要確定這個二維平面的最大範圍,按乙個方向來看不會超過30×5=150,所以我們二維陣列開成[300][300]就夠用了。再設定座標的偏移量dx,dy,我們假設方向從(0,1)即y軸的正方向開始,按照乙個八邊形順時針的方向安排dx,dy,這樣子的話dx+1,dy+1表示順時針**45°的那條射線,dx+7,dy+7則表示逆時針**的那條射線,dfs記錄當前還沒有被標記的的位置。注意across陣列的目的是判斷在當前這一深度,這個點,這個方向是否已經被訪問過。
**
#include
using
namespace std;
struct point};
int num=0;
int dx[8]
=;int dy[8]
=;//從y軸的正半軸方向開始,按順時針的八邊形順序安排dx,dy
bool map[
1000][
1000]=
;bool across[
1000][
1000][
31][8
]=;//8個方向,**30次最多
void
dfsmap
(point p,
int*a,
int d,
int i,
int n)
} i++
;dfsmap
(p,a,
(d+1)%
8,i,n)
;dfsmap
(p,a,
(d+7)%
8,i,n)
;//當時出錯是因為沒有加餘數而超出了範圍
}int
main()
point p
(500
,500);
//從map圖的中心開始
dfsmap
(p,a,0,
0,n)
; cout
}
CSP第一次模擬 C 可怕的宇宙射線
宇宙射線會在無限的二維平面上傳播 可看作乙個二維網格圖 初始方向預設向上。宇宙射線在發射出一段距離後 向該方向左右45。出兩條宇宙射線,同時威力不變!宇宙射線會 n次,每次 後前進ai個單位長度。輸入第一行包含乙個正整數n n 30 表示宇宙射線會 n次 第二行包含n個整數,a1,a2,an,第i個...
第一次csp模擬賽B
題意 乙個人連續n天去買東西,給出n個資料,為之後n天每天要買的東西的數量,如果能按照這個資料購買,則成功,輸出 yes 不能按照給定的資料購買,則輸出 no 店家有兩種購買方式,一 一次性購買兩個。二 今天買乙個,送一張券留著明天用。明天手裡的券必須用完,如有剩餘則失敗 其中兩種方式每天都可以購買...
CSP模擬 題目C 可怕的宇宙射線
眾所周知,瑞神已經達到了cs本科生的天花板,但殊不知天外有天,人外有苟。在浩瀚的宇宙中,存在著 種叫做苟狗的生物,這種生物天生就能達到人類研究生的知識水平,並且天生擅長csp,甚至有全國第一的水平 但最可怕的是,它可以發出宇宙射線 宇宙射線可以摧毀人的智商,進行降智打擊 宇宙射線會在無限的二維平面上...