您的位置:首页 > 其它

天梯 1098 均分纸牌

2013-08-09 22:03 225 查看
解题报告:给出n堆纸牌,现在规定:第一堆的牌只能移动到第二堆,然后第n堆的牌只能移动到第n-1堆,然后其他的堆里的牌可以往两边移动,一次可以移动任意张,问最少可以经过多少次移动才可以使得所有堆里面的牌的数量相同(可以确定的是牌的总数是堆的数的整数倍)

这题可以说是贪心,我的做法是定义一个数,初始化为0,同时定义一个位置指针,然后从第一个位置往后移动,每次都加上这个堆的纸牌数与平均数的差,当这个数等于0的时候就将这个位置与位置指针的差累加起来,同时将位置指针更新到当前位置的下一个位置。这样最后便得到最后结果,时间复杂度只是O(n)。下面是代码:

#include<cstdio>
const int maxn = 100+3;
int n,A[maxn];

int main() {
int sum = 0 , eve ;
while(scanf( " %d "  , & n ) != EOF) {
sum = 0;
for( int i = 1;i <= n ; ++i ) {
scanf("%d",&A[i]);
sum += A[i];
}

eve = sum / n;
int t = 0 , flag = 1 ,  tot = 0 ;

for( int i = 1;i <= n ;  ++i )  {
t += ( A[i] - eve ) ;
if( t == 0 ) {
tot += (i - flag);
flag = i + 1 ;
}
}
printf("%d\n",tot);
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: