2019 7 9 校內測試 T1挖地雷

2022-02-17 15:58:28 字數 2936 閱讀 4815

這一次是交流測試?邊交流邊測試(滑稽

這個題是乙個遞推問題。

首先我們看第乙個格仔,因為它只影響了它的上面和右上面這兩個地方是否有雷。

我們可以分3種情況討論:

1. 第乙個格仔的數字是2;

2. 第乙個格仔的數字是1;

3. 第乙個格仔的數字是0;

顯然對於第1種情況和第3種情況,我們可以確定前兩個空的埋雷情況:

第1種情況就是前兩個空都埋雷了,第3種情況就是錢兩個空都沒有埋雷;

第二種情況我們需要再往下細分:第乙個空埋雷,第二個空不埋雷;第乙個空不埋雷,第二個空埋雷;

我們根據樣例來分析遞推情況:

首先根據第乙個格仔的數字是2,我們可以推斷出前兩個空肯定是有雷的:

接下來我們考慮第二個格仔上的數字對埋雷情況造成的影響,考慮到我們在考慮第 i 個格仔上的數字時,第 1~i 個空已經確定下來了(是否埋雷),所以對於第2個格仔及以後,它真正能確定的空也就是第 i + 1 個,根據樣例可知,第三個空是不埋雷的:

接下來考慮第三個格仔上的數字對埋雷情況造成的影響,前三個空已經確定了,所以只能確定第四個空的情況,根據樣例可知,第四個空是埋雷的:

以此類推,當我們考慮第 i 個格仔上的數字對答案造成的影響的時候,實際上只能確定第 i + 1 個空的情況,對於具體的是否埋雷,我們還要看第 i - 1 ,i 個空的埋雷情況與第 i 個格仔的數字的關係,輕鬆得到如下關係:

我們設 tot 是第 i - 1 ~ i 個空埋了多少個雷,vis [ i ] 表示第 i 個空是否埋雷,a [ i ] 表示第 i 個格仔的數字是多少,則 tot 可以用下面一段**求出:

for(int i=k-1;i<=k;i++)      //

當前考慮第k個格仔上的數字對答案的影響

if(vis[i]) tot++;

有了這個 tot 有什麼用呢?它決定著第 i + 1 個空是否埋雷,特別的,還能判斷是否有解!

若 a [ k ] - tot = 1,說明第 i + 1個空需要埋雷;            

若 a [ k ] - tot = 0,說明第 i + 1個空不需要埋雷;

若 a [ k ] - tot >=2,說明無解;                               //乙個格仔最多放乙個雷,你卻還有兩個以上的雷需要放,肯定無解

若 a [ k ] - tot < 0;說明無解;                                //明明只需要放 a [ k ] 個,你光前兩個空放的都比 a [ k ] 多了,肯定無解

說句題外話,第四個關係式我當時沒想到,然後就 65 了qwq~ 

**也很好寫,就是這樣的(其實就是套上去的):

if(a[k]-tot==1) vis[k+1]=1

;

if(a[k]-tot==0) vis[k+1]=0

;

if(a[k]-tot>=2) return ; //

乙個格仔最多放乙個雷,你卻還有兩個以上的雷需要放,肯定無解

if(a[k]-tot<0) return ; //

明明只需要放a[k]個,你光前兩個空放的都比a[k]多了,肯定無解

search(k+1); //

找下乙個格仔

還有乙個小細節需要考慮到:

我們前面已經說了第 i 個格仔的數字的實際影響是第 i + 1個空,所以說我們遍歷第 n - 1個格仔的時候不就把雷給埋完了?那第 n 個格仔有啥子用?

這裡我就用第 n 個格仔的數字再來判斷一下我們的埋雷情況是否合法,當我們遍歷到第 n 個格仔時,我們需要看一下 vis [ n - 1 ] + vis [ n ] 是否等於 a [ n ] 即可。

so ,我們就可以上完整**啦:

#include#include

#include

using

namespace

std;

intn,bj,tot;

int a[10001],vis[10001

];void search(int

k)

if(a[k]-tot==1) vis[k+1]=1

;

if(a[k]-tot==0) vis[k+1]=0

;

if(a[k]-tot>=2) return ; //

乙個格仔最多放乙個雷,你卻還有兩個以上的雷需要放,肯定無解

if(a[k]-tot<0) return ; //

明明只需要放a[k]個,你光前兩個空放的都比a[k]多了,肯定無解

search(k+1); //

找下乙個格仔

}int

main()

}if(a[1]==2) //

分情況討論

if(a[1]==0) search(2

);

if(a[1]==1) //

細分埋乙個雷的情況

}if(bj)

else cout<

no answer

"<

return0;

}

2019 7 9 校內測試 T2 極值問題

這一次是交流測試?邊交流邊測試 滑稽 乍一看這是一道數學題,因為1e9的資料讓我暴力的心退卻。數學又不好,不會化簡式子嘞,咋辦?不怕,咱會打表找規律。考場上真的是打表找出了規律,打表打法好!這裡就不帶著大家一起來打表了,我們是來正正經經的推式子滴。so,這道題就是求斐波那契數列的大水題啦。water...

兒童節校內測T1 逃亡

題目描述 逃亡 escape.cpp c pas 邪狼緊張地說 老大,警察快追過來了,我們快逃跑吧!修羅王傲然道 在我的字典裡沒有逃跑 邪狼內心崇敬地想 老大實在是太有領袖範了 修羅王接著說 只有戰略轉移。邪狼 現在,修羅王和邪狼兩人需要從a地出發盡快到達b地。出發時a地有一輛可帶一人的自動駕駛懸浮...

2017 9 3 校內模擬T1卡片card

題意 有三種字母,可以用兩個不同的換乙個第三種字母,兩個相同的換乙個同種字母 即消去乙個 問最後剩下的字母。第一題顯然是if題,總體來說只有三種情況 1.有三種不同的 輸出 bgr 2.有兩種不同的 3.只有一種字母 輸出這個字母 極醜 1 include2 include3 include4 us...