cf B George and Cards

题意:给你一个只有‘.’和‘#‘的n*n的格子,问所有的‘#‘是不是只属于一个十字叉,如果不是输出NO,否则输出YES。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 using namespace std;
 5
 6 int n;
 7 char g[200][200];
 8 bool vis[200][200];
 9
10 int main()
11 {
12     scanf("%d",&n);
13     for(int i=1; i<=n; i++)
14     {
15         scanf("%s",g[i]);
16     }
17     for(int i=1; i<=n; i++)
18     {
19         for(int j=0; j<n; j++)
20         {
21             if(g[i][j]==‘#‘)
22             {
23                 bool flag=false;
24                 if(g[i+1][j-1]==‘#‘&&g[i+1][j]==‘#‘&&g[i+1][j+1]==‘#‘&&g[i+2][j]==‘#‘&&i+2<=n&&j-1>=0)
25                 {
26                     flag=true;
27                     g[i+1][j-1]=‘.‘;
28                     g[i+1][j]=‘.‘;
29                     g[i+1][j+1]=‘.‘;
30                     g[i+2][j]=‘.‘;
31                     g[i][j]=‘.‘;
32                 }
33                 else if(g[i+1][j+1]==‘#‘&&g[i][j+1]==‘#‘&&g[i][j+2]==‘#‘&&g[i-1][j+1]==‘#‘&&j+2<n&&i+1<=n&&i-1>=1)
34                 {
35                     flag=true;
36                     g[i+1][j+1]=‘.‘;
37                     g[i][j+1]=‘.‘;
38                     g[i][j+2]=‘.‘;
39                     g[i-1][j+1]=‘.‘;
40                     g[i][j]=‘.‘;
41                 }
42                 else if(g[i-1][j]==‘#‘&&g[i+1][j]==‘#‘&&g[i][j-1]==‘#‘&&g[i][j+1]==‘#‘&&j-1>=0&&i+1<=n&&i-1>=1&&j+1<n)
43                 {
44                     flag=true;
45                     g[i-1][j]=‘.‘;
46                     g[i+1][j]=‘.‘;
47                     g[i][j-1]=‘.‘;
48                     g[i][j+1]=‘.‘;
49                     g[i][j]=‘.‘;
50                 }
51                 else if(g[i-1][j]==‘#‘&&g[i-2][j]==‘#‘&&g[i-1][j-1]==‘#‘&&g[i-1][j+1]==‘#‘&&j-1>=0&&i+1<=n&&i-2>=1&&j+1<n)
52                 {
53                     flag=true;
54                     g[i-1][j]=‘.‘;
55                     g[i-2][j]=‘.‘;
56                     g[i-1][j-1]=‘.‘;
57                     g[i-1][j+1]=‘.‘;
58                     g[i][j]=‘.‘;
59                 }
60                 else if(g[i][j-1]==‘#‘&&g[i][j-2]==‘#‘&&g[i-1][j-1]==‘#‘&&g[i+1][j-1]==‘#‘&&j-2>=0&&i+1<=n&&i-1>=1&&j+1<n)
61                 {
62                     flag=true;
63                     g[i][j-1]=‘.‘;
64                     g[i][j-2]=‘.‘;
65                     g[i-1][j-1]=‘.‘;
66                     g[i+1][j-1]=‘.‘;
67                     g[i][j]=‘.‘;
68                 }
69                 if(!flag)
70                 {
71                     printf("NO\n");
72                     return 0;
73                 }
74             }
75         }
76     }
77     printf("YES\n");
78     return 0;
79 }

时间: 2024-11-03 22:22:08

cf B George and Cards的相关文章

Codeforces 387E George and Cards

George and Cards 我们找到每个要被删的数字左边和右边第一个比它小的没被删的数字的位置.然后从小到大枚举要被删的数, 求答案. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define PLL pair<LL, LL> #define PLI pair<LL, int> #define PII pa

Codeforces Round #227 (Div. 2)---E. George and Cards(贪心, 树状数组+set维护, 好题!)

George is a cat, so he loves playing very much. Vitaly put n cards in a row in front of George. Each card has one integer written on it. All cards had distinct numbers written on them. Let's number the cards from the left to the right with integers f

cf 546C Soldier and Cards

题目链接:C. Soldier and Cards Two bored soldiers are playing card war. Their card deck consists of exactly n cards, numbered from 1 to n, all values are different. They divide cards between them in some manner, it's possible that they have different numb

cf D George and Interesting Graph

题意:给你一个有趣图的定义:在这个图中有一个根,根与每个点都有边和回边,除了根之外,其他的点的出度和入度都为2,然后给你一个图让你经过几步操作可以使此图变为有趣图,操作为:删边或者加边. 思路:枚举根,然后删除与根有关的边,重新建图,用二分图求最大匹配,可以用匈牙利算法,加的边数:满足题中有关根的加边数+(点数-匹配数),删掉的边数:边数-满足题中有关根的使用的边数-匹配时使用的边数. 1 #include <cstdio> 2 #include <cstring> 3 #incl

cf B George and Round

题意:输入n,m,下一行为n个数a1<a2<a3......<an:然后再输入m个数b1<=b2<=b3<.....<=bm: 每个ai都必须在b中找到相等的数,找不到可以让比ai的大的数转化为ai,问最少需要添加几个数,使得ai在b都能找到相等的数. 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5

Codefoeces 387E - George and Cards 贪心+线段树

首先要知道每次拿走最小才会达到最优,因为最小的不会给其他的提供任何加分,只有可能减小加分. 删除卡片的次序确定了,剩下的就是确定每段区间的左右端点. pos[i] 表示数字 i 在初始序列中的位置. 首先枚举i (i = 1 -> n),如果不需删除,则将pos[i]放入set<int> S中,如果不需删除,则在S中二分查找上下界. 总的时间复杂度为o(  (n-k)*log(k)  ). #include <algorithm> #include <iostream&

cf C. George and Number

http://codeforces.com/problemset/problem/387/C 题意:给你一个大数,让你求个集合,可以通过操作得到这个数,求集合中个数最大值,操作 :从集合中任意取两个数,大的数放在前面小的数放在后面组成一个数在重新放入集合中,经过重复的操作,集合中只剩一个数,这个数就是给你的数. 思路:要求个数最大,可以让这个大数的每一个数字为集合中的一个数,但是集合中不能有0,所以在连续的0前面要连着一个非零的数. 1 #include <cstdio> 2 #include

CF 1173C Nauuo and Cards

题目链接 题目大意 一共有2*n张牌,n张0,n张1到n.现在随机的n张(有0有数字)在手上,另n张再牌堆中,现在已知手上的牌和牌堆的牌,可以进行多次以下操作:将手中任意一张牌放入牌堆底,将牌堆顶的一张牌放入手中.问最少多少次后可使牌堆顶到牌堆底的n张牌分别为1,2,3...n. 思路 首先,要完成最后的状态,可以每次都放0,直到所有数字都在手上(因为0的张数与数字的张数都是n,所以一定可以用0把所有数字都换出来),再依次放入牌堆. 可以减少次数的地方有两个: 有些牌直接在牌堆里就可以,不用再手

cf 830B - Cards Sorting 树状数组

B. Cards Sorting time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Vasily has a deck of cards consisting of n cards. There is an integer on each of the cards, this integer is between 1 and 10