做阿里巴巴跟网站哪个更好,做网站没有活,网站的布局结构,开发一个微信小程序多少费用目录 题目描述
思路点拨
AC代码 题目描述
题目网址#xff1a;[NOIP2002 提高组] 均分纸牌 - 洛谷
有 N 堆纸牌#xff0c;编号分别为 1,2,……,N。每堆上有若干张#xff0c;但纸牌总数必为 N 的倍数。可以在任一堆上取若干张纸牌#xff0c;然后移动。
移牌规则为[NOIP2002 提高组] 均分纸牌 - 洛谷
有 N 堆纸牌编号分别为 1,2,……,N。每堆上有若干张但纸牌总数必为 N 的倍数。可以在任一堆上取若干张纸牌然后移动。
移牌规则为在编号为 1 堆上取的纸牌只能移到编号为 2 的堆上在编号为 N 的堆上取的纸牌只能移到编号为 N−1 的堆上其他堆上取的纸牌可以移到相邻左边或右边的堆上。
现在要求找出一种移动方法用最少的移动次数使每堆上纸牌数都一样多。
例如 N4 时4堆纸牌数分别为 9,8,17,6。
移动 3 次可达到目的
从第三堆取 4 张牌放到第四堆此时每堆纸牌数分别为 9,8,13,10。从第三堆取 3 张牌放到第二堆此时每堆纸牌数分别为 9,11,10,10。从第二堆取 1 张牌放到第一堆此时每堆纸牌数分别为 10,10,10,10。
思路点拨 首先我们得知道每堆牌应有多少张。题目保证了总牌数是堆数的倍数那么最终每一堆的牌数应该是(a[1]a[2]……a[N])/N也就是N堆牌的平均数。 比如有4堆牌分别是有2、3、4、7张而平均数就是4也就是最后每堆牌所分得的张数。 每一堆牌的张数只可能有三种情况
1.比平均值小少几张就让右边的一堆给几张。
2.和平均值相同不需要给判断下一个。
3.比平均值大多几张就把多的给右边。 情况一时右边一堆的张数可能会出现负数但没有关系最终还是会有其他堆补回来的。 AC代码
#includebits/stdc.h
using namespace std;
const int maxn105;
int n,a[maxn],cnt;
int main()
{int mean,sum0;cinn;for(int i1;in;i){cina[i];suma[i];}meansum/n; //☆总和÷堆数平均每堆牌数 for(int i1;in-1;i){if(a[i]!mean) {a[i1]a[i]-mean;//a[i]少的话会加上负数相当于减少右边的牌cnt;}}coutcntendl;return 0;
}