codeforces B. Fox and Cross 解题报告
生活随笔
收集整理的這篇文章主要介紹了
codeforces B. Fox and Cross 解题报告
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:http://codeforces.com/problemset/problem/389/B
題目意思:給出一個由n行n列組成的board,其中'#'表示的一片地方恰好能畫滿十字架,畫滿的意思表示:這些十字架不能夠共用'#' !當然如果全部都是'.',表示不畫十字架。問如果有'#'和'.'的board上,是否恰好能填滿所有'#'。能就輸出 'YES',否則輸入'NO'
????? 比賽的時候完全沒有思路,這是賽后做出來的,參考了別人的思路。
??????可以這樣想,考慮到十字架這么特殊的圖案,以每個十字架的最高點為判斷的起始點,也就是說,當能畫一個十字架時,絕對是首先遇上它的最高點的!然后判斷該點的正下方連續兩點,還有下方第一個點緊挨著左右兩邊是否也為'#'即可。另外一個要考慮的地方是肯定不能畫十字架的情況,每一列的第一個和最后一個字符如果為'#'是不能畫十字架的,還有,倒數后兩行出現'#'也是不行的。
?????這次比賽的題目總的來說,很有意思,雖然食蛋了!大悲劇~~~
?
????
1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 using namespace std; 6 7 const int maxn = 100 + 10; 8 char cell[maxn][maxn]; 9 10 int main() 11 { 12 int i, j, n, flag; 13 while (scanf("%d", &n) != EOF) 14 { 15 for (i = 0; i < n; i++) 16 scanf("%s", cell[i]); 17 flag = 0; 18 for (i = 0; i < n && !flag; i++) 19 { 20 for (j = 0; j < n && !flag; j++) 21 { 22 if (cell[i][j] == '#') 23 { 24 if (j == 0 || j == n-1 || i >= n-2 || cell[i+1][j] != '#' || cell[i+1][j-1] != '#' || cell[i+1][j+1] != '#' || cell[i+2][j] != '#') // 第1列,最后1列,倒數后兩行,還有十字架所占的所有地方都要檢測 25 { 26 printf("NO\n"); 27 flag = 1; 28 } 29 else // 十字架所占的'#'注銷掉,以避免阻礙判斷下一個十字架 30 { 31 cell[i+1][j] = '.'; 32 cell[i+1][j-1] = '.'; 33 cell[i+1][j+1] = '.'; 34 cell[i+2][j] = '.'; 35 } 36 } 37 } 38 } 39 if (!flag) 40 printf("YES\n"); 41 } 42 return 0; 43 }?
?
????
????
?
?
轉載于:https://www.cnblogs.com/windysai/p/3537823.html
總結
以上是生活随笔為你收集整理的codeforces B. Fox and Cross 解题报告的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 详细解读Spring2.5 +Strut
- 下一篇: TCP/IP 笔记一