題目描述:
眾所周知,瑞神已經達到了cs本科生的天花板,但殊不知天外有天,人外有苟。在浩瀚的宇宙中,存在著一種叫做苟狗的生物,這種生物天 生就能達到人類研究生的知識水平,並且天生擅長csp,甚至有全國第一的水平!但最可怕的是,它可以發出宇宙射線!宇宙射線可以摧毀 人的智商,進行降智打擊! 宇宙射線會在無限的二維平面上傳播(可以看做乙個二維網格圖),初始方向預設向上。宇宙射線會在發射出一段距離後**,向該方向的 左右45°方向**出兩條宇宙射線,同時威力不變!宇宙射線會** 次,每次**後會在**方向前進 個單位長度。 現在瑞神要帶著他的小弟們挑戰苟狗,但是瑞神不想讓自己的智商降到普通本科生 那麼菜的水平,所以瑞神來請求你幫他計算出共有多 少個位置會被"降智打擊"
輸入格式:
輸入第一行包含乙個正整數 ,表示宇宙射線會**n次.第二行包含n個正整數a1 a2 … an,第i個數ai表示第i次**的宇宙射線會在它原方向上繼續走多少個單位長度。
輸出格式:
輸出乙個數 ,表示有多少個位置會被降智打擊
題目思路:
這個題目比較麻煩的一點就是有些路徑會重合,所以並不是單純的利用等比函式來計算,而是要用dfs。
首先我們要繪製一張大的二維陣列記錄位置,這樣每走過乙個點就記錄乙個位置,如果發現這個位置走過了就不用再計數了。
題目裡描述的是**方向,所以我們要處理兩個方向,我們發現對於方向來說有八組,每一組對應的是每個方向**後的結果
int dx[8]
=;int dy[8]
=;
這樣我們每次呼叫dfs的時候只需要用兩個方向即可
每次按照**之後的長度走一段距離,然後標記走過的路徑,如果沒走過就結果++,重新**繼續前進,直到走到頭了為止
void
dfs(
int x,
int y,
int now,
int direction)
}dfs
(x,y,now+1,
(direction+1)
%8);
dfs(x,y,now+1,
(direction+7)
%8);
}
**如下:
#include
using
namespace std;
int n,ans,a[31]
;int dx[8]
=;int dy[8]
=;bool visit[
600]
[600][
31][8
];//需要注意這個陣列很大,用int直接mle
bool flag[
600]
[600];
void
dfs(
int x,
int y,
int now,
int direction)
}dfs
(x,y,now+1,
(direction+1)
%8);
//取模就可以進行迴圈,保證取值範圍
dfs(x,y,now+1,
(direction+7)
%8);
}int
main()
dfs(
300,
300,1,
0);//為了方便初始我們從中間開始計數
cout<}
第一次模擬總結
首先強調一件重要的事 檔案一定要處理好 1.main函式後面寫兩行對應檔案輸入輸出 2.檔名 dl24 名字,裡面有子檔案和cpp。t1 這個題首先我是不太清楚這個楊輝三角的知識點的 之前學的太少了 不過自學了一下 和爸爸討論,也是掌握了這個知識,這題就好做了。方法就是列印楊輝三角,找到對應點,並取...
第一次測試總結
對於本次測試,自己感到很不理想,原以為之前已經做過很多次這套題了,從線上最後一次課結束到現在便沒有進行複習,認為自己僅有的基礎已經 勝券在握 但事實卻狠狠地打了自己的臉,導致幾個失分點並非不會而是記憶模糊從而沒能實現功能。通過本次測試,我進一步發現了自己的不足點,如下 1 ajax刪除掌握的不夠牢固...
Oracle第一次測試分析
刪除同義詞語法正確的是 drop synonym sy nonym name 關於oracle建立間隔分割槽後,正確的是 使用partition 分割槽名 可以檢視特定分區內存放的表記錄 關於序列描述正確的是 建立序列的許可權是create sequence或 create any sequence...