当前位置: 代码迷 >> 综合 >> HAUT OJ 1221: 疲惫的一天
  详细解决方案

HAUT OJ 1221: 疲惫的一天

热度:55   发布时间:2023-12-04 03:22:46.0

问题描述:

    已经凌晨了,在外面玩了一天的cds,现在早已身心俱疲,可它还距离学校的大门整整一公里,于是他就查了一下有没有大巴可以坐
以尽可能的少走路,果然,虽然现在已经很晚,但仍有两辆大巴还在运作,那么问题来了,cds怎样才能使自己走的路最短?
我们假设把路设为一条直线数轴,数轴上有整数点(0,1,2,3,4,……),其中每两点之间相距1m。已知cds在数轴的0点,
而学校在点1000上,两辆大巴的起点和终点分别为x1, y1, x2, y2,其中中途不能下车,车可坐可不坐,且保证能等到车(我们假设cds时间很多)。

输入:

4个正整数x1, y1, x2, y2,数据保证x1<y1, x2<y2, 且都在int范围内,

输出:

一个整数,占一行,表示cds需要步行的最短路程

样例输入:

300 1000 50 301

样例输出:

51

原因分析:

1. 因为for是从1开始的,所以sort第一项应为 a+1 同理最后一项位a+n+1

2.情况 

1.坐一辆车 (2种)   2.坐两辆车     3.不坐车

做两辆车同时要分情况讨论 三种情况,第一辆包括第二辆,第一第二辆有交叉,完全不交叉


解决方案:


#include<bits/stdc++.h>
using namespace std;
#define endl"\n"
typedef struct pos{int x,y;
}p;
bool cmp(p a,p b)
{return a.x<b.x;
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int n1,n2,n3,result,i;p a[4];for(i=1;i<=2;i++)cin>>a[i].x>>a[i].y;sort(a+1,a+3,cmp);n1=a[1].x+abs(1000-a[1].y);n3=a[2].x+abs(1000-a[2].y);if(a[2].y>a[1].y)n2=a[1].x+abs(a[1].y-a[2].x)+abs(1000-a[2].y);elsen2=n1;result=min(n1,1000);result=min(result,n2);cout<<min(result,n3)<<endl;return 0;}