【7.9校內test】T1挖地雷

(土氣的名字萬里挑一丫丫)html

而後這個題是個遞推,lz的考場想法:c++

3個的最好肯定,先把3個的肯定下來,而後從這個點往前推,從這個點日後推這麼算吧qwq數組

而後碼長:也是很nice,最關鍵的是,我都寫的這麼複雜了,它竟然仍是沒有ac掉,已經放棄修改這篇(85分代碼,不會改了。掛出來求救)代碼了qwq(歡迎大佬批評指正,全篇推翻也能夠)。post

而後題解solution:ui

首先咱們先判斷輸入的數據是否合法,顯然對於每一個格子中的數字,只能是0~3之間的數,其它數只要出現就無解。spa

而後是計算雷,對於a[1]==0||a[1]==2的狀況,咱們均可以清楚的肯定出雷的位置,對於a[1]==3的狀況,顯然是無解的,而對於a[1]==1的狀況,咱們須要分1 0和0 1兩種狀況討論了。code

定義一個int型數組f,表示雷的數量,由於咱們有無解的狀況,因此可能會出現f[i]<0||f[i]>1的狀況,所以不能夠開bool數組;htm

而後根據a[1]的值,先將f[1]f[2]判斷出來(對於a[1]==1的狀況咱們先假定爲其中的一種,若是這種狀況無解,咱們再判斷另外一種狀況)blog

而後遞推:get

int dt(){
    for(int i=2;i<=n;i++){
        f[i+1]=a[i]-f[i-1]-f[i];
        if(f[i+1]<0||f[i+1]>1) return 0;
    }
    if(f[n+1]!=0) return 0;
    else return 1;
}

從i=2開始遞推,推到i=n;

對於當前位置kk的地雷數,等於上一個位置kk-1的a(由於a數組表示的是自己,+1,-1的總地雷數)-上一個位置kk-1的地雷數-上上個位置kk-2的地雷數;

畫個圖感性理解一下:

 

而後當某個位置的雷>1或<0時,顯然就炸了,直接進入無解狀況。

而後這個遞推,會推到f[n+1],顯然若是f[n+1]!=0,也是無解的,所以最後記得判一下;

當a[1]==1而且咱們算的第一種狀況無解時,咱們還須要判斷一下第二種狀況,因此須要再寫一個特判。

CODE:

#include<bits/stdc++.h>

using namespace std;

inline int read(){
    int ans=0;
    char last=' ',ch=getchar();
    while(ch>'9'||ch<'0') last=ch,ch=getchar();
    while(ch<='9'&&ch>='0') ans=(ans<<1)+(ans<<3)+ch-'0',ch=getchar();
    if(last=='-') ans=-ans;
    return ans;
}

int n,aa;
int a[10005],f[10005];

int dt(){
    for(int i=2;i<=n;i++){
        f[i+1]=a[i]-f[i-1]-f[i];
        if(f[i+1]<0||f[i+1]>1) return 0;
    }
    if(f[n+1]!=0) return 0;
    else return 1;
}

int main(){
    n=read();
    for(int i=1;i<=n;i++){
        a[i]=read();
        if(a[i]>3||a[i]<0) {
            printf("No answer");
            return 0;
        }
    }
    
    if(a[1]==3||a[n]==3) {
        printf("No answer");
        return 0;
    }
    if(a[1]==0){
        f[1]=f[2]=0;
    }
    if(a[1]==1){
        f[1]=1;f[2]=0;
    }
    if(a[1]==2){
        f[1]=f[2]=1;
    }
    
    aa=dt();
    
    if(aa==0&&a[1]==1){
        f[1]=0;f[2]=1;
    }
    aa=dt();
    if(aa==0) printf("No answer");
    else {
        for(int i=1;i<=n;i++)
            printf("%d ",f[i]);
    }
    return 0;
}

end-

相關文章
相關標籤/搜索