card card card HDU - 6205

2018TYUT暑期ACM模拟赛(3)
card card card HDU - 6205
题意:n对牌。上行为奖励,下行为罚值。一对排有固定差值,规则是,从头开始加差值,只要小于0
就不能在往后,想要可以移动最大的距离。需要移动几张牌往后。
思路:由于上行和值-下行的和值为0,会有一一种情况可以使得正好可以全部走完全部的排。感觉有点玄学不好说。自己理解把。

#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=1e6+10;
int dis[maxn];
int a[maxn];
int main()
{
    int n,b;
    while(scanf("%d",&n)!=EOF){
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        for(int i=1;i<=n;i++)
            scanf("%d",&b),dis[i]=a[i]-b;
        int move=0;
        int sum=0;
        for(int i=1;i<=n;i++)
        {
            //cout<<dis[i]<<" ";
            if(sum+dis[i]<0)
            {
                move=i;sum=0;//cout<<i<<endl;
            }
            else
            sum+=dis[i];//cout<<endl;
        }
        printf("%d\n",move);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/miranda_ymz/article/details/81075611