题目
题意:对于一个$n imes m$的矩阵的最外一圈,问是否能用$k imes 1$的方块填满
分析
考虑左右两边的情况,分类讨论,切记考虑所有可能的情形。
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 int n, m; 5 6 bool judge(int k) 7 { 8 if(k == 1) return true; 9 if(k == 2) 10 { 11 if(n % 2) 12 { 13 if((m-1) % k == 0) return true; 14 if((m-2) % k == 0 && m % k == 0) return true; 15 } 16 else 17 { 18 if((m-2) % k == 0) return true; //两边放满 19 if(m % k == 0) return true; //两边都不放满 20 if((m-1) % k == 0) return true; //一边放满,一边不放满 21 } 22 } 23 else 24 { 25 if(n % k == 0) 26 { 27 if((m-2) % k == 0) return true; 28 //if(m % k == 0) return true; 29 } 30 if(n % k == 1) 31 { 32 //printf("%d %d %d ", n, m, k); 33 if((m-1) % k == 0) return true; //两边对齐 34 if((m-2) % k == 0 && m % k == 0) return true; //两边交错 35 } 36 if(n % k == 2) 37 { 38 if(m % k == 0) return true; 39 } 40 } 41 return false; 42 } 43 44 int main() 45 { 46 while(scanf("%d%d", &n, &m) == 2) 47 { 48 int T; 49 scanf("%d", &T); 50 while(T--) 51 { 52 int tmp; 53 scanf("%d", &tmp); 54 if(judge(tmp)) printf("YES "); 55 else printf("NO "); 56 } 57 } 58 return 0; 59 }