D - card card cardHDU - 6205

it2022-05-06  10

D - card card card HDU - 6205

题目核心:这道题给出的数据最终必然会满足将所有的卡片集齐,所以我们要做的就是找出将卡片集齐的最小移动次数 设置一个sum变量,初始值为0,来表示当前卡片的数量之和和减掉penalty value值之和,然后从头开始遍历,一直找到那个能把所有卡片拿走的点就是答案。

#include<iostream> #include<stdio.h> #define ll long long using namespace std; ll a[1000001]; ll b[1000001]; int main() { int n; while(scanf("%d",&n)!=EOF) { ll zong=0; for(int i=0;i<n;i++) { scanf("%d",&a[i]); zong+=a[i]; } for(int i=0;i<n;i++) { scanf("%d",&b[i]); } ll sum=0; int num=0; int i=0; int ans=0; while(i<n) { sum+=(a[i%n]-b[i%n]); if(sum<0) { sum=0; i++; ans=i; } else if(sum==zong) { break; } else { i++; } } cout<<ans<<endl; } }

最新回复(0)