Codeforces Round #301 (Div. 2) B. School Marks

其实是很水的一道bfs题,昨晚比赛的时候没看清题意,漏了一个条件。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<cmath>
 5 #include<algorithm>
 6 #include<set>
 7 #include<map>
 8 #include<queue>
 9 #include<stack>
10 #include<string>
11 #include<vector>
12 #define maxn
13 #define INF 1000000000
14 using namespace std;
15 int vist[510][510];
16 char str[510][510];
17 int dirx[]={-1,0,1,0};
18 int diry[]={0,1,0,-1};
19 int m,n,stx,sty,edx,edy;
20 int judge(int x,int y)
21 {
22     if(x>=0&&x<n&&y>=0&&y<m)
23         return 1;
24     return 0;
25 }
26 int bfs()
27 {
28     queue<int> q;
29     stx--;
30     sty--;edx--;edy--;
31     int num=stx*m+sty;
32     q.push(num);
33     //vist[stx][sty]--;就改的这个地方,因为起点和终点有可能相同
34     while(!q.empty())
35     {
36         num=q.front();
37         //printf("%d==\n",num);
38         q.pop();
39         int xx=num/m;
40         int yy=num%m;
41
42         for(int i=0;i<4;i++)
43         {
44             int newx=xx+dirx[i];
45             int newy=yy+diry[i];
46             if(newx==edx&&newy==edy&&vist[newx][newy]==0)
47                 return 1;
48             if(judge(newx,newy)&&vist[newx][newy]>0)
49             {
50                 q.push(newx*m+newy);
51                 vist[newx][newy]--;
52             }
53         }
54     }
55     //printf("==\n");
56     return 0;
57
58 }
59 int main()
60 {
61     scanf("%d %d",&n,&m);
62     for(int i=0;i<n;i++)
63         scanf("%s",str[i]);
64     scanf("%d %d",&stx,&sty);
65     scanf("%d %d",&edx,&edy);
66     for(int i=0;i<n;i++)
67     {
68         for(int j=0;j<m;j++)
69         {
70             if(str[i][j]==‘X‘)
71                 vist[i][j]=0;
72             else
73                 vist[i][j]=1;
74         }
75     }
76     if(bfs())
77         printf("YES\n");
78     else
79         printf("NO\n");
80     return 0;
81 }
时间: 2024-10-31 23:00:12

Codeforces Round #301 (Div. 2) B. School Marks的相关文章

贪心 Codeforces Round #301 (Div. 2) B. School Marks

题目传送门 1 /* 2 贪心:首先要注意,y是中位数的要求:先把其他的都设置为1,那么最多有(n-1)/2个比y小的,cnt记录比y小的个数 3 num1是输出的1的个数,numy是除此之外的数都为y,此时的numy是最少需要的,这样才可能中位数大于等于y 4 */ 5 #include <cstdio> 6 #include <iostream> 7 #include <algorithm> 8 #include <cstring> 9 using na

Codeforces Round #301 (Div. 2) -- (A,B,C,D)

题目传送:Codeforces Round #301 (Div. 2) A. Combination Lock 水题,求最小移动次数,简单贪心一下即可 AC代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <cmath> #include <queue> #include <stack> #i

Codeforces Round #424 (Div. 2) C. Jury Marks(乱搞)

题目链接:Codeforces Round #424 (Div. 2) C. Jury Marks 题意: 给你一个有n个数序列,现在让你确定一个x,使得x通过挨着加这个序列的每一个数能出现所有给出的k个数. 问合法的x有多少个.题目保证这k个数完全不同. 题解: 显然,要将这n个数求一下前缀和,并且排一下序,这样,能出现的数就可以表示为x+a,x+b,x+c了. 这里 x+a,x+b,x+c是递增的.这里我把这个序列叫做A序列 然后对于给出的k个数,我们也排一下序,这里我把它叫做B序列,如果我

DFS/BFS Codeforces Round #301 (Div. 2) C. Ice Cave

题目传送门 1 /* 2 题意:告诉起点终点,踩一次, '.'变成'X',再踩一次,冰块破碎,问是否能使终点冰破碎 3 DFS:如题解所说,分三种情况:1. 如果两点重合,只要往外走一步再走回来就行了:2. 若两点相邻, 4 那么要不就是踩一脚就破了或者踩一脚走开再走回来踩一脚破了:3. 普通的搜索看是否能到达, 5 若能还是要讨论终点踩几脚的问题:) 6 DFS 耗时大,险些超时,可以用BFS来做 7 */ 8 #include <cstdio> 9 #include <algorit

贪心 Codeforces Round #301 (Div. 2) A. Combination Lock

题目传送门 1 /* 2 贪心水题:累加到目标数字的距离,两头找取最小值 3 */ 4 #include <cstdio> 5 #include <iostream> 6 #include <algorithm> 7 #include <cstring> 8 using namespace std; 9 10 const int MAXN = 1e3 + 10; 11 const int INF = 0x3f3f3f3f; 12 char s[MAXN],

「日常训练」School Marks(Codeforces Round 301 Div.2 B)

题意与分析(CodeForces 540B) 代码 #include <iostream> #include <cstring> #include <algorithm> #include <vector> #define MP make_pair #define PB push_back #define fi first #define se second #define ZERO(x) memset((x), 0, sizeof(x)) #define

CodeForces Round #301 Div.2

今天唯一的成果就是把上次几个人一起开房打的那场cf补一下. A. Combination Lock 此等水题看一眼样例加上那个配图我就明白题意了,可是手抽没有注释掉freopen,WA了一发. 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int maxn = 1000 + 10; 5 6 char s1[maxn], s2[maxn]; 7 8 int main() 9 { 10 int n; cin >>

【解题报告】Codeforces Round #301 (Div. 2) 之ABCD

A. Combination Lock 拨密码..最少次数..密码最多有1000位. 用字符串存起来,然后每位大的减小的和小的+10减大的,再取较小值加起来就可以了... #include<stdio.h> #include<math.h> #include<string.h> #include<iostream> #include<algorithm> #include<map> #include<set> #inclu

Codeforces Round #301 (Div. 2) E. Infinite Inversions —— 逆序对 离散化 + 树状数组

题目链接:http://codeforces.com/contest/540/problem/E E. Infinite Inversions time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output There is an infinite sequence consisting of all positive integers in