- 均分纸牌
- 2016-06-21 09:18:15 @
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
int n,a[105],sum=0,step=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
}
sum/=n;
for(int i=1;i<=n;i++)
a[i]-=sum;
int l=1,r=n;
while(!a[l]&&l<n)l++;
while(!a[r]&&r>1)r--;
while(l<r)
{
a[l+1]+=a[l];
a[l]=0;
step++;
l++;
while(!a[l+1]&&l<r)l++;
}
printf("%d",step);
return 0;
}
2 条评论
-
767159723 LV 8 @ 2016-06-23 21:51:15
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> int main(void) { int n,a[100],sum=0,x,s,i; scanf("%d",&n); for (i=0;i<n;i++) { scanf("%d",&a[i]); sum+=a[i]; } sum/=n; x=0; s=0; for (i=0;i<n;i++) { if ((a[i]+x)!=sum) s++; x+=a[i]-sum; } printf("%d",s); }
想法非常简单。。问题是要能明白可以移动负数张牌(代表反方向移动)这样就容易多了,在a[i]+x=sum时不需要移动牌,次数不加1
-
2016-06-23 21:51:13@
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> int main(void) { int n,a[100],sum=0,x,s,i; scanf("%d",&n); for (i=0;i<n;i++) { scanf("%d",&a[i]); sum+=a[i]; } sum/=n; x=0; s=0; for (i=0;i<n;i++) { if ((a[i]+x)!=sum) s++; x+=a[i]-sum; } printf("%d",s); }
想法非常简单。。问题是要能明白可以移动负数张牌(代表反方向移动)这样就容易多了,在a[i]+x=sum时不需要移动牌,次数不加1
- 1