第一次模擬測試 3

2021-10-03 21:47:54 字數 1705 閱讀 2560

題目描述:

眾所周知,瑞神已經達到了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...