是在没想到,一开始以为它是个dfs题,结果他是一个数学题,就是求两点之间的距离
#include<iostream>
#include<stdlib.h>//包含绝对值函数abs(int)
using namespace std;
//ctrl+alt+n快速编译运行
//使用GB2312可以正常编译出中文
//ctrl+k+t可以切换主题
const long long ZY = 2020;//指的是最大步数
//在高中数学中我们学过:在一维坐标系下,"两个数的差的绝对值"表示距离.
//即|x1-x2|表示这两个位置之间相差的距离.
//eg:-2与3之间的距离为(|-2-3|=5)=>表示从-2位置走到3位置,需要走5步.
int main(){
//(0,0),(2020,11),(11,14),(2000,2000).
//(0,0)竖着延伸最远是(0,2020)和(0,-2020),\
//横着延伸最远是(2020,0)和(-2020,0).
//(2020,11)竖着延伸最远是(2020,11-2020)和(2020,11+2020),\
//横着延伸最远是(2020-2020,11)和(2020+2020,11).
//依次类推,...
//(11,14)
//(2000,2000)
//!!!!!!其实根本不用这么分析!!!
//直接看(0,0),(2020,11),(11,14),(2000,2000)的\
//最小横坐标,最小纵坐标和最大横坐标,最大纵坐标即可.
//即(最小横坐标,最小纵坐标)是(0,0)=>最大横向延伸为\
//"(-2020,0)与(2020,0)",最大纵向延伸为"(0,-2020)与(0,2020)"
//(最大横坐标,最大纵坐标)是(2020,2000)=>最大横向延伸为\
//"(2020-2020,2000)与(2020+2020,2020)",\
//最大纵向延伸为"(2020,2000-2020)与(2020,2000+2020)".
//综上所述,x的范围应该控制在[0-2020,2020+2020]\
//y的范围应该控制在[0-2020,2000+2020].
long long gs = 0;
long long x = 0 , y =0;
//(0,0),(2020,11),(11,14),(2000,2000)。
//遍历整张地图:
//x:[-2020,2020+2020]
//y:[-2020,2000+2020]
for(x = -2020 ; x <= 2020+2020 ; x++){//x表示横着走
for(y = -2020 ; y <= 2000+2020 ; y++){//y表示纵着走
gs += (abs(x-0)+abs(y-0)<=ZY)//这个表示横着走的步数与纵着走的步数和在2020步之内就OK
||(abs(x-2020)+abs(y-11)<=ZY)
||(abs(x-11)+abs(y-14)<=ZY)
||(abs(x-2000)+abs(y-2000)<=ZY);
}
}
cout<<"答案为:";
cout<<gs<<endl;//答案为:20312088
return 0;
}
答案为:20312088