HDU 5933 ArcSoft’s Office Rearrangement
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5933
输入n,k
输入n个数
操作:1.相邻两个数加和 2.把一个数拆成两个数
输出操作数cnt
(long long a long long 就是一个坑)
#include<cstdio>
using namespace std;
int main()
{
int t,ca=0,n,k;
long long a[100050];
scanf("%d",&t);
while(t--)
{
ca++;
scanf("%d %d",&n,&k);
long long sum=0;
for(int i=0;i<n;i++)
{
scanf("%lld",&a[i]);
sum+=a[i];
}
if(sum%k!=0) {printf("Case #%d: -1\n",ca);continue;}
sum/=k;
long long cnt=0;
for(int i=0;i<n;i++)
{
if(a[i]==sum) continue;
else if(a[i]>sum) {cnt++;a[i]-=sum;i--;}
else if(a[i]<sum) {cnt++;a[i+1]+=a[i];}
}
printf("Case #%d: %lld\n",ca,cnt);
}
return 0;
}