题意:一个国际象棋棋盘(8×8),从中挖掉两个格子,问能否用31张1×2的卡片恰好盖住剩余的格子。
分析:本来想二分图匹配,后来发现别人说有简便方法。
就是把棋盘染色成国际象棋黑白相间的棋盘,如果两个格子同色则不可,否则可以。
如果两个都为黑色,那么棋盘上剩余的白色就比黑色多,每个卡片只要放在棋盘上,必然覆盖一个白色和一个黑色。所以此情况不可以。
白色同理。至于别的情况为什么可以,很难证明,但可以大概想象出来。
View Code
#include#include #include #include usingnamespace std; int main() { //freopen("t.txt", "r", stdin); int t; scanf("%d", &t); for (int i =0; i < t; i++) { printf("Scenario #%d:\n", i +1); int a, b, c, d; scanf("%d%d%d%d", &a, &b, &c, &d); if (((a + b) &1) == ((d + c) &1)) printf("0\n"); else printf("1\n"); putchar('\n'); } return0; }