有n个数,对于这n个数,每次只能执行下面两种操作其中的一种:
一:将相邻的两个数相加合并成一个数,
二:将一个数分成相邻的两个数,这两个数的和仍然等于之前的数
请问至少需要多少次操作才能将这n个数变成k个相等的数。
Input
第一行是一个数t,代表有t组样例。(1≤T≤100)
每组样例的第一行是两个数n(1≤n≤105)和k(1≤k≤105)
接下来一行是n个数a0,a1,a2…an-1
Output
对于每组样例,输出的格式是 ‘Case #x: y’,x代表这是第几个case,从1开始,y是最少的操作次数,
如果不能将这n个数变成相等的k个数,则y为-1.
Sample Input
3
1 3
14
3 1
2 3 4
3 6
1 2 3
Sample Output
Case #1: -1
Case #2: 2
Case #3: 3
代码如下:
#include<cstdio>
#define LL long long
using namespace std;
LL a[100010];
int main(){
int T,t=0;
scanf("%d",&T);
while(T--){
int n,k;
scanf("%d %d",&n,&k);
LL sum=0;
for(int i=0;i<n;i++){
scanf("%lld",&a[i]);
sum+=a[i];
}
t++;
printf("Case #%d: ",t);
if(sum%k==0){
sum/=k;
LL ans=0;
for(int i=0;i<n;i++){
ans+=a[i]/sum;
if(a[i]%sum==0){
ans--;
}else{
a[i+1]+=(a[i]%sum);
ans++;
}
}
printf("%d\n",ans);
}else{
printf("-1\n");
}
}
return 0;
}