1 条题解

  • 0
    @ 2024-12-20 13:47:57
    #include<iostream>
    #include<cstdio>
    #include<cmath> 
    
    using namespace std;
    
    int m,n,s,xbrox,xbroy,minx,miny;//xbrox,xbroy表示 谢bro 当前位置坐标
    //minx,miny表示 谢bro 距离最近的扔饭卡的地点的坐标
    double mindist;//mindist表示 谢bro 距离最近的扔饭卡的地点的距离
    
    signed main()
    {
    	scanf("%d%d%d",&m,&n,&s);
    	xbrox=xbroy=m/2;
    	if(m&1==0)
    		xbrox--,xbroy--;
    	for(int i=1;i<=n;++i)
    	{
    		int x=i,y=i;//老师坐标 
    		int lx=max(i-s,1),rx=min(i+s,m);//老师巡查的 x 轴范围 
    		int ly=max(i-s,1),ry=min(i+s,m);//老师巡查的 y 轴范围 
    		if(xbrox>=lx&&xbrox<=rx&&xbroy>=ly&&xbroy<=ry)//如果 谢bro 的位置在巡查范围内 
    		{
    			cout<<"no";//扔不了一点 
    			return 0;//结束 
    		}
    		else
    		{
    			double curdist=max(abs(xbrox-x),abs(xbroy-y));//计算直线坐标 
    			if(abs(xbrox-x)!=abs(xbroy-y))//如果跨对角线 
    				curdist+=0.5;//算上对角线更长的距离 
    			mindist=min(mindist,curdist);//更新最短路 
    		}
    	}
    	cout<<mindist;//输出答案(必须用cout) 
    	return 0;
    }
    
    • 1

    信息

    ID
    599
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    2
    已通过
    1
    上传者