题解:题目满足一定能拿走全部的卡片(貌似),然后就是看挪多少次满足。复制一遍序列在后面,看在哪个位置全部拿走就好了。(数据好水)
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
int a[2*maxn],b[2*maxn];
int main()
{
int n;
while(~scanf("%d",&n))
{
memset(a,0,sizeof a);
memset(b,0,sizeof b);
for(int i=0; i<n; i++)
{
scanf("%d",&a[i]);
a[i+n]=a[i];
}
int temp;
for(int i=0; i<n; i++)
{
scanf("%d",&b[i]);
b[i+n]=b[i];
}
int ans=0,sum=0,num=0,m=0,l=0;
for(int i=0; i<2*n; i++)
{
//num+=a[i];
sum+=(a[i]-b[i]);
l++;
if(l>=n)
{
ans=i-l+1;
break;
}
if(sum<0)
{
/*if(num>m)
{
m=num;
ans=i;
}*/
if(i>n)
break;
num=0;sum=0;l=0;
}
}
printf("%d\n",ans);
}
}