蓝桥杯_国赛_扩散

蓝桥杯

是在没想到,一开始以为它是个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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

踏过山河,踏过海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值