bfs-常规

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
const int N=15;
using namespace std;
char map[N][N];

int st[N][N];
int dist[N][N];
int mx[4]={-1,0,1,0};
int my[4]={0,1,0,-1};
int lx,ly;
int fx,fy;

int main()
{ for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
{ cin>>map[i][j];

if(map[i][j]=='B')
fx=i,fy=j;

if(map[i][j]=='L')
lx=i,ly=j;
}
queue<pair<int,int>> q;

q.push({lx,ly}); // 入队
dist[lx][ly]=0; //起点的距离为0
st[lx][ly]=1;
while(q.size())
{ auto t=q.front() ;
q.pop();

int a=t.first;
int b=t.second;
for(int i=0;i<4;i++)
{ int x=a+mx[i];
int y=b+my[i];

if(x>=0&&x<10&&y>=0&&y<10&&!st[x][y]&&map[x][y]!='R')
{ if(map[x][y]=='B')
{
cout<<dist[a][b];
return 0;

}

st[x][y]=1;
dist[x][y]=dist[a][b]+1;
q.push({x,y});


}



}




}





}

一道模拟题

小蓝每天都锻炼身体。

正常情况下,小蓝每天跑 11 千米。如果某天是周一或者月初(11 日),为了激励自己,小蓝要跑 22 千米。如果同时是周一或月初,小蓝也是跑 22 千米。

小蓝跑步已经坚持了很长时间,从 2000 年 1 月 1日周六(含)到 2020 年 10月 1 日周四(含)。请问这段时间小蓝总共跑步多少千米?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<bits/stdc++.h>
using namespace std;
int D[13];
bool check(int y){
if(y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) return true;
return false;
}
signed main()
{
D[1] = 31 , D[2] = 28 , D[3] = 31 , D[4] = 30 , D[5] = 31 , D[6] = 30;
D[7] = 31 , D[8] = 31 , D[9] = 30 , D[10] = 31 , D[11] = 30 , D[12] = 31;
int ans = 0 , week = 6;
for(int y = 2000 ; y <= 2020 ; y ++){
if(check(y)) D[2] = 29;
else D[2] = 28;
for(int m = 1 ; m <= (y == 2020 ? 10 : 12) ; m ++){
if(y == 2020 && m == 10) D[m] = 1;
for(int d = 1 ; d <= D[m] ; d ++){
if(week == 1 || d == 1) ans += 2;
else ans += 1;
week = (week + 1) % 7;
}
}
}
cout << ans << '\n';
return 0;
}