nitoj_244_很有意思的贪心

来源:互联网 发布:淘宝客服薪资待遇 编辑:程序博客网 时间:2024/06/05 06:49

SYS招新啦!
ES天天在SYS没事干,忽然想组织一波招新以扩大SYS的队伍。

然后有一堆萌新报名了,所有萌新的关系都特别好,因为同性。

因为萌新实在是太多了,ES想要做一个刷选,来刷掉一些人。ES使用超自然力,造了一条很长很长的直线跑道,萌新被带到了跑道上面,跑道上有些位置存在宝石,坏坏的ES说:“如果你们能按规定的时间拿到宝石并到我指定的点,就算你们晋级了!”

每个萌新,宝石以及ES指定的位置都在同一直线上,位置可以类比为数轴上的点,一个人只能拿一个宝石,每个人移动一个位置的时间为1。题目保证:没有两个人在同一位置,没有两个宝石在同一位置。由于这些萌新关系都特别好,他们的目标是所有人晋级,请问他们能达到目的么?

Input
输入包含多组数据。

对于每组数据,第一行输入4个整数N,M,P,T(1<=N<=M<=106, 1<=P<=109, 0<=T<=232-1),分别代表有N个萌新,M个宝石,ES指定的P位置,ES要求的时间T;

第二行输入N个整数,第 i 个整数 a[ i ]代表第 i 个萌新的位置。(a[i - 1] < a[ i ], i >= 2)

第三行输入M个整数,第 i 个整数 b[ i ]代表第 i 个宝石的位置。(b[i - 1] < b[ i ], i >= 2)

1<=a[i], b[i]<=109.

Output
对于每组数据,输出 “Yes” 代表所有人都能晋级,否则输出”No”.

Sample Input
1 1 10 7
11
7
Sample Output
Yes
Source
2017新生训练赛第一场

ans:
看宝石,最优拿的策略是,拿身边最近的,然后就是看是不是所有人都能拿,数据好像是有点小问题

#include<bits/stdc++.h>using namespace std;#define ll long longconst ll N=(ll)1e6+10;ll a[N],b[N];int main(){    ll n,p,t,m,i,j;    while(cin>>n>>m>>p>>t)    {        for(i=0;i<n;i++)            scanf("%lld",a+i);        for(i=0;i<m;i++)            scanf("%lld",b+i);        ll f=0,now=0;        for(i=0;i<m;i++)        {            if(abs(a[now]-b[i])+abs(b[i]-p)<=t&&now<n) now++;            if(now==n)            {                f=1;                break;            }        }        if(f)            puts("Yes");        else puts("No");    }    return 0;}
原创粉丝点击