題解 AcWing95 費解的開關

2022-07-02 11:36:09 字數 1093 閱讀 1983

題面

一道非常好的遞推練習題。

實現**時要注意一些細節問題。

#include #define debug fprintf(stderr, "passing [%s] line %d\n", __function__, __line__)

#define itn int

#define gi gi

using namespace std;

typedef long long ll;

typedef pair pii;

typedef pair piii;

inline int gi()

while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();

return f * x;

}inline ll gl()

while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();

return f * x;

}const int dx = , dy = ;

//定義常量陣列表示當前要翻轉的燈及它上下左右的位置

int n, m;

char g[7][7];

inline void get(int x, int y) //摁下第 x 行 y 列的燈 }}

inline int getans() //求答案

} for (int i = 0; i < 4; i+=1) //遞推出下一行的狀態

}} bool ok = true;

for (int j = 0; j < 5; j+=1)

//沒有達到目標狀態

} if (ok) ans = min(ans, sum); //記錄最少步數

memcpy(g, bf, sizeof g); //還原備份

} if (ans > 6) return -1; //不能在 6 步以內達到目標狀態

return ans; //返回答案

}int main()

return 0;

}

acwing 95 費解的開關

時 空限制 1s 256mb 你玩過 拉燈 遊戲嗎?25盞燈排成乙個5x5的方形。每乙個燈都有乙個開關,遊戲者可以改變它的狀態。每一步,遊戲者可以改變某乙個燈的狀態。遊戲者改變乙個燈的狀態會產生連鎖反應 和這個燈上下左右相鄰的燈也要相應地改變其狀態。我們用數字 1 表示一盞開著的燈,用數字 0 表示...

AcWing 95 費解的開關

你玩過 拉燈 遊戲嗎?25盞燈排成乙個5x5的方形。每乙個燈都有乙個開關,遊戲者可以改變它的狀態。每一步,遊戲者可以改變某乙個燈的狀態。遊戲者改變乙個燈的狀態會產生連鎖反應 和這個燈上下左右相鄰的燈也要相應地改變其狀態。我們用數字 1 表示一盞開著的燈,用數字 0 表示關著的燈。下面這種狀態 101...

ACwing 95 費解的開關

你玩過 拉燈 遊戲嗎?25盞燈排成乙個5x5的方形。每乙個燈都有乙個開關,遊戲者可以改變它的狀態。每一步,遊戲者可以改變某乙個燈的狀態。遊戲者改變乙個燈的狀態會產生連鎖反應 和這個燈上下左右相鄰的燈也要相應地改變其狀態。我們用數字 1 表示一盞開著的燈,用數字 0 表示關著的燈。下面這種狀態 101...