NOIP2002提高组第1题 均分纸牌
来源:互联网 发布:一键推广软件 编辑:程序博客网 时间:2024/05/29 19:17
【问题描述】
有 n 堆纸牌,编号分别为 1,2,…,n。每堆上有若干张,但纸牌总数必为 n 的倍数。可以在任一堆上取若于张纸牌,然后移动。
移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 n 的堆上取的纸牌,只能移到编号为 n-1 的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。
现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。
【输入格式】
第 1 行为整数n,表示有n堆纸牌。
第 2 行有 n 个整数:A1 A2 … An ,Ai 表示第 i 堆纸牌初始数量。
【输出格式】
所有堆均达到相等时的最少移动次数。
【输入样例】
4
9 8 17 6
【输出样例】
3
【样例解释】
有4 堆纸牌,数量分别为:9、8、17、6,移动3次可达到目的:
第1次:从第 3 堆取 4 张牌放到第 3 堆:9、8、13、10
第2次:从第 3 堆取 3 张牌放到第 2 堆:9、11、10、10
第3次:从第 3 堆取 1 张牌放到第 1 堆:10、10、10、10
【数据范围】
1 <= N <= 100 , l<= Ai <=10000
【来源】
NOIP2002提高组第1题
这道题其实很简单,我们只需要从最左边开始分析,如果最左边的一个不是刚好平均数的纸牌数,他就必须移一次,移到右边一个那里,所以一直这么分析下去,就可以得到下面的代码。
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<vector>#include<algorithm>#include<queue>using namespace std;const int maxn=105;int a[maxn],n,ans=0;int main(){ scanf("%d",&n); int t=0; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); t+=a[i]; } t=t/n; for(int i=1;i<=n;i++) { if(a[i]>t)//给右边的 a[i]-t个。 { a[i+1]+=a[i]-t; ans++; a[i]=t; } if(a[i]<t)//从右边拿t-a[i]个。 { a[i+1]-=t-a[i]; ans++; a[i]=t; } } printf("%d",ans); return 0;}
1 0
- NOIP2002提高组第1题 均分纸牌
- NOIP2002提高组第1题 均分纸牌
- NOIP2002提高组 均分纸牌
- NOIP2002提高组/洛谷P1031均分纸牌
- NOIP2002 提高组 复赛 均分纸牌
- NOIP2002 提高组之一 均分纸牌
- 【模拟】【NOIP2002】均分纸牌
- [贪心]NOIP2002 均分纸牌
- NOIP2002 均分纸牌
- [模拟][NOIP2002] 均分纸牌
- NOIP2002 均分纸牌
- [NOIP2002]均分纸牌题解
- NOip2002均分纸牌
- noip2002 均分纸牌
- 【NOIP2002】均分纸牌
- [noip2002]: 均分纸牌
- noip2002 均分纸牌 (模拟)
- noip2002-均分纸牌 2008.11.5
- 【JZOJ 4639】Angel Beats!
- 计算机英语
- spring常用注解使用讲解
- 定位new运算符
- 关于R语言字符型数据清洗问题
- NOIP2002提高组第1题 均分纸牌
- Html css 前端学习
- NOIP2002提高组第1题 均分纸牌
- 用两个栈实现队列
- ios开发中WIFI相关功能总结
- Android微信支付
- KMP算法-Next数组递归求法
- 串口学习(三)
- 80x86微处理器结构及其工作模式