两人三足(C语言)

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

题目描述

大马猴和机智羊打算参加运动会的两人三足项目(两个人并排跑,中间两条腿绑在一起),为此,机智羊甚至学会了站立走路ヾ(≧▽≦*)o,为了备战比赛,他们预计要做一些默契度训练。

大马猴正常走路每走一步的距离为 x,机智羊每走一步的距离为 y。但在两人三足项目中,他们每走一步的距离必须一样。

如果大马猴花了 a1天去调整,他可以将步长改为 x-1∼x+1中任何一个数;如果他花了a1+a2天去调整,那么他可以将步长改为 x-2∼x+2中任何一个数.即如果大马猴花费a1+a2+a3+…+an天,则他可以把走一步的距离改为 x-n∼x+n中任何一个数;同理,机智羊花费b1+b2+b3+...+bm天,则他可以把走一步的距离改为 y-m∼y+m中任何一个数。注意,ai,bi可能为负数,即如果只想改距离3,可能a1+a2+a3+a4+a5 会比a1+a2+a3更优。

大马猴最多只能改n步,机智羊最多只能改m步,因为他俩的腿长是有限的。注意不能多轮调整,调整到的步长必须是正整数。

请问至少需要多少天,才能让他俩走一步的距离一样。数据保证一定有解,且最优解一定大于0。

输入描述:

第一行,包含四个正整数 xxx,yyy,nnn,mmm,具体含义如题面所示。

第二行,包含 nnn 个整数 aia_iai​。

第三行,包含 mmm 个整数 bib_ibi​。

输出描述:

一行一个整数,表示至少需要多少天。

示例1

输入

6 3 2 2
2 2
1 -1

输出

2

说明

最优解为两个人调整步距为 555 :
大马猴需要改变 111 格距离,需要 222 天;
机智羊需要改变 222 格距离,需要 1+(−1)=01+(-1)=01+(−1)=0 天,
所以至少需要 222 天。

示例2

输入

8 2 5 4 
1 1 2 2 2
2 5 3 2

输出

7

说明

最优解为两个人调整步距为4:

大马猴需要改变4格距离,需要1+1+2+2=6天;
机智羊需要改变2格距离,需要2+5=7天,所以至少需要7天
(大马猴最后1天不用做调整,这一天浪费掉)。

备注:

【数据范围】

对于 50%50\%50% 的测试点,1≤x,y≤10001 \le x,y \le 10001≤x,y≤1000,1≤n,m≤10001 \le n,m \le 10001≤n,m≤1000,−1000≤ai-1000 \le a_i−1000≤ai​,bi≤1000b_i \le 1000bi​≤1000;

对于另外 20%20\%20% 的测试点,1≤x1 \le x1≤x,y≤105y \le 10^5y≤105,1≤n1 \le n1≤n,m≤105m \le 10^5m≤105,0≤ai0 \le a_i0≤ai​,bi≤104b_i \le 10^4bi​≤104;

对于 100%100\%100% 的测试点,1≤x1 \le x1≤x,y≤105y \le 10^5y≤105,1≤n1 \le n1≤n,m≤105m \le 10^5m≤105,−104≤ai-10^4 \le a_i−104≤ai​,bi≤104b_i \le 10^4bi​≤104。
#include<stdio.h>
int main(){
    int x,y,n,m,i,k,min=99999999;
    scanf("%d%d%d%d",&x,&y,&n,&m);
    int a[n+1],b[m+1],z=(x-y>0?x-y:y-x);
    for(i=1,a[0]=0;i<=n;i++){
        scanf("%d",&a[i]);
        a[i]=a[i]+a[i-1];
    }
    for(i=1,b[0]=0;i<=m;i++){
        scanf("%d",&b[i]);
        b[i]=b[i]+b[i-1];
    }
    for(i=n-1;i>0;i--)
        if(a[i]>a[i+1]) a[i]=a[i+1];
    for(i=m-1;i>0;i--)
        if(b[i]>b[i+1]) b[i]=b[i+1];
    for(k=(z<n?z:n);k>=0&&z-k<=m;k--)
        if(min>(a[k]>b[z-k]?a[k]:b[z-k])) min=(a[k]>b[z-k]?a[k]:b[z-k]);
    printf("%d",min);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

❃黑洞᭄ꦿ࿐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值