題面
一道非常好的遞推練習題。
實現**時要注意一些細節問題。
#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...