中石油新生第一次訓練賽 H題掃雷

2021-09-02 13:08:34 字數 1557 閱讀 6439

時間限制: 1 sec 記憶體限制: 128 mb

提交: 187 解決: 32

題目描述

小q空的時候挺喜歡玩玩電腦遊戲的。自從程式設計技術提高後,他就想,要是自己也能開發出一款遊戲來,那該多好啊!不過,小q也不著急,先練好基本功再說。windows中就有一款叫掃雷的小遊戲,挺好玩的,不過想編出乙個來,還真不容易。小q就自己設想了一種簡單的掃雷遊戲:在n行2列的方格棋盤上,左列某些方格內埋有地雷,而右列每個方格中都有乙個數字(0~3),第i格的數字表示:左列第i-1、i、i+1格(即:上、中、下三格)中埋雷的總數。如下所示:左圖是初始狀態,右圖是掃雷完成狀態(插小旗的方格內有雷)。

你的任務是:根據右列的數字分析出左列格仔中的地雷(0表示無雷,1表示有雷),並且統計出左列格仔中地雷的總數。

小q想,如果這樣的任務能完成了,相信編出更複雜的掃雷遊戲也就為期不遠了。

輸入

第一行,乙個整數n(2≤n≤40),第二行有n個數字(以乙個空格相隔),表示右列格仔中的數字。輸入資料保證正確有解。

輸出

第一行是n個0、1數字(沒有空格相隔),表示左列每格中有無地雷。第二行乙個整數,表示地雷總數。

樣例輸入

71 2 3 2 2 2 2

樣例輸出

0111011

5這個題當時就差一點點就做出來了,只少了一句

if

(a[0][

1]==0

) mark=

1;

我的做法也沒有什麼技巧,就是利用乙個小規律。

只要我能確定出第乙個格仔有沒有雷,題目其實就已經解決了。第乙個格仔無非兩種情況,有雷or無雷,這樣就可以先假設第乙個格仔有雷,這樣根據a的值就可以確定第二個有沒有雷,然後後面的就都出來了,在推出後面的時候如果出現矛盾,則假設是錯的,轉而讓第乙個格仔沒有雷,在進行一次推理就可以了。

昨天錯在哪了呢,如果輸入的a為0,在資料少於3個時 我先假設有雷的話會預設第乙個有雷(由於資料較少不會進入迴圈,無法判斷是否矛盾),這和a為0是互相矛盾的,但是我沒有去判斷這個矛盾,導致出錯。所以加上上面那一句,判斷一下就好了。(找了好久。。。。)

#include

intmain()

if(a[0]

[1]==

0)mark=1;

//判斷一下前兩個格沒有雷的情況,以免資料少時出錯

else

for(

int i=

1;i1;i++)}

if(mark==1)

//如果第一格有雷不成立

}for

(int i=

0;i)printf

("\n");

printf

("%d"

,x);

return0;

}

第一次訓練賽 H

fzu 1075 假設x是乙個正整數,它的值不超過65535 即1input 輸入的第一行含乙個正整數k 1 k 10 表示測試例的個數,後面緊接著k行,每行對應乙個測試例,包含乙個正整數x。output 每個測試例對應一行輸出,輸出x的素數乘積表示式,式中的素數從小到大排列,兩個素數之間用 表示乘...

第一次訓練賽 B

fzu 1575 某天,無聊的小斌叫上幾個同學玩遊戲,其中有比較笨的小興,比較傻的小雪,可愛的小霞和自以為是的小楠。他們去找聰明的小明去給他們當裁判。判定誰取得遊戲勝利。而這個遊戲是由小斌想個1到10000000的數字讓大家猜,看誰先猜中。為了防止小斌作弊,小明記錄下了遊戲的整個過程。你的任務是判斷...

第一次訓練賽 E

fzu 2123 s得到乙個數,他想知道這個數每一位上的數字的孔數之和。1,2,3,5,7這幾個數字是沒有孔的,0,4,6,9都有乙個孔,8有兩個孔。input 輸入資料的第一行為乙個數t表示資料組數。接下來t行,每行輸入乙個正整數n 1 n 1000 表示要求數字孔數之和的數。n不會有前導0。ou...