← 轻点一下~求个赞~
$\Huge\color{green}{春季每日一题2022题解集合}$
$\color{darkorange}{本篇题解可能有点长(但是十分有用!),建议慢慢食用~}$
分析(不想看就算了……)
这题,乍一看有难度,似乎还要扯上搜索
$ NO ! NO ! NO ! $
别把自己坑了,其实这题只要用 $if$ 就行了!
读者:“口说无凭”
仔细想一下,这题无非就两种情况
第一种,就是牛棚和湖不在一条直线,一般情况
第二种,就是牛棚和湖在一条直线上,这个情况还要分几类,我后面会讲的
我还是画个图吧
..........
..........
..........
..B.......
..........
.....R....
..........
..........
.....L....
..........
画个图
这是第一种情况。我们由图可知,那块该死的石头无论如何也挡不住我们的路(横冲直撞的奶牛)
为啥呢,因为我们的路线是这样的(我用=标出的):
..........
..........
..........
..B.......
..=.......
..=..R....
..=.......
..=.......
..===L....
..........
是不?
其实这和样例解释里给的距离是一模一样的,上过小学五年级都知道可以通过平移来使样例解释的图变成我的那个图
样例解释的:
..........
..........
..........
..B.......
..C.......
..CC.R....
...CCC....
.....C....
.....L....
..........
这样我们就知道了第一种情况的公式: $ans=abs(L.x-B.x)-1+abs(L.y-b.y)-1+1$
我们再来看第二种情况:牛棚和湖在同一直线上
这个就比较烦了,第二种情况又要分多种情况:
1.先说最简单的:B=L(这里我直接用 $B$ 代替牛棚,用 $L$ 代替湖,用 $R$ 代替石头了hh),那 $ans$ 就等于 $1$
2.然后就是 $B$ 和 $L$ 的 $x$ 坐标相等(没被 $R$ 挡住), $ans$ 就等于 $abs(B.y-L.y)-1$
3. $B$ 和 $L$ 的 $x$ 坐标相等(没被 $R$ 挡住), $ans$ 就等于 $abs(B.x-L.x)-1$
4.接下来的也是 $B$ 和 $L$ 的 $x$ 坐标相等,但是被 $R$ 挡住了!不过这也不怕,不就多了 $2$ 步嘛,所以 $ans$ 就等于 $abs(B.y-L.y)-1+2$
5.这也是一样的 $B$ 和 $L$ 的 $y$ 坐标相等且被 $R$ 挡住了, $ans$ = $abs(B.x-L.x)-1+2$
$\color{red}{注意! R 可能在 B 和 L 的范围外,要注意判断!!}$
没晕吧?
哈哈
$\color{MediumSpringGreen}{还有不懂的在评论区留言}$~
C++ Code(呜呜呜,别抄,是错的……仅供参考……)
不过我也是有 A C 代码的,想看的戳这里
#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
pair <int,int> B,R,L;
int ans=0;
int main(){
for(int i=1;i<=10;i++){
for(int j=1;j<=10;j++){
char chi;
cin>>chi;
if(chi=='B') B.x=i,B.y=j; //记录牛棚的x,y坐标
if(chi=='R') R.x=i,R.y=j; //记录石头的x,y坐标
if(chi=='L') L.x=i,L.y=j; //记录湖的x,y坐标
}
}
int s1=abs(B.x-L.x)-1;
int s2=abs(B.y-L.y)-1;
if(B.x==L.x||B.y==L.y){
if(B.x==L.x&&B.y==L.y){
ans=0;
}else if(B.x==L.x){
if(R.x>=min(B.x,L.x)&&R.x<=max(B.x,L.x)){ //判断R在B和L的范围外的情况
ans=s2+2;
}else{
ans=s2;
}
}else if(B.y==L.y){
if(R.y>=min(B.y,L.y)&&R.y<=max(B.y,L.y)){
ans=s1+2;
}else{
ans=s1;
}
}
}else{
ans=s1+s2+1;
}
printf("%d",ans);
return 0;
}
$\color{SpringGreen}{有不懂的在下面留言↓}$
那个你的AC打卡在哪抄的???我的打卡是WA不是AC而且我的另一篇AC代码版也不是炒的!
抄,打错了
讲错了,是这个:
https://www.acwing.com/solution/content/105945/
我可没有Cirl C+Ctrl V而是Cirl A+Ctrl C+Cirl X+Cirl+Z+Ctrl V…………
#include[HTML_REMOVED]
using namespace std;
char p[20][20];
int a,b,c,d,e,f,rns;
int main()
{
for(int i=1;i<=10;i)
for(int j=1;j<=10;j)
cin>>p[i][j];
for(int i=1;i<=10;i)
for(int j=1;j<=10;j)
{
if(p[i][j]==’B’)
{ a=i;b=j; }
if(p[i][j]==’L’)
{ c=i;d=j; }
if(p[i][j]==’R’)
{ e=i;f=j; }
}
rns=abs(c-a)+abs(d-b)-1;
if((a==c&&c==e&&((f[HTML_REMOVED]b)||(f>d&&f[HTML_REMOVED]a&&e[HTML_REMOVED]c&&e[HTML_REMOVED]d&&f>b)||(f[HTML_REMOVED]a&&e>c)||(e<c&&e<a))))
rns+=0;
cout<<rns<<endl;
return 0;
}
没人比我的代码更好
也挺好啊hh
没人比我更懂c++
你很nb啊,连md语言都不会
搞个错的我差点就复制了哎,我不都反复强调了是错的吗
还有,你的个人空间好像说过:百分之百没抄
你没看斜线吗???
az
你看我的思路就会了吧,还需要我的代码吗?$\Huge{Orz}$
你写个分享还差不多
why?
太长了吗?
因为题解一般是正确的
不一定,题解重要的是思路,不是代码
封禁用户不也发过吗?点赞数还这么多好吧,以后我吧所有题都发个题解(逃那你的粉丝可能就没现在这么多了hh
$\Huge{stO-AcWing2AK-Orz}$
az