本文主要是介绍hdu 5933 ArcSoft's Office Rearrangement,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
http://acm.hdu.edu.cn/showproblem.php?pid=5933
给一串数,需要经过最少次数的操作,使得最终得到k个相同的数,每次操作可以将2个数合并或者将一个数拆成2个。模拟即可,从第一个数开始,如果该数大于目标值,就不断减掉目标值,将剩下的加到下一项上去,再注意其中操作次数的变化即可。
#include<bits/stdc++.h>
using namespace std;
int main(){int t;cin>>t;int cs=1;while(t--){int n,k;cin>>n>>k;int a[111111];int i;long long int sum=0;for( i=1;i<=n;i++){scanf("%d",&a[i]);sum+=a[i]; }if(sum%k!=0){cout<<"Case #"<<cs++<<": "<<"-1"<<endl;continue; } long long int K=sum/k;long long int ans=a[1];long long int tim=0;for( i=2;i<=n;i++){while(ans>=K){tim++;ans-=K;}if(ans==0){tim--;ans=a[i];}else {tim++;ans+=a[i];}}while(ans>K)tim++,ans-=K;cout<<"Case #"<<cs++<<": "<<tim<<endl;}return 0;
}
这篇关于hdu 5933 ArcSoft's Office Rearrangement的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!