nitoj_244_很有意思的贪心

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 long
const 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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值