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;
}