一中OJ #1341 均分纸牌 [NOIP 2002T1] | 贪心 | 解题报告
来源:互联网 发布:c语言计算1到n的乘积 编辑:程序博客网 时间:2024/05/23 19:14
一中OJ | #1341 [NOIP 2002_T1] 均分纸牌
时限 1000MS/Case 内存 64MB/Case
题目描述
有 n 堆纸牌,编号分别为 1,2,…,n。每堆上有若干张,但纸牌总数必为 n 的倍数。可以在任一堆上取若于张纸牌,然后移动。
移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 n 的堆上取的纸牌,只能移到编号为 n-1 的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。
现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。
输入格式
第 1 行为整数n,表示有n堆纸牌。
第 2 行有 n 个整数:A[1],A[2] … A[n] ,A[i] 表示第 i 堆纸牌初始数量。
输出格式
所有堆均达到相等时的最少移动次数。
样例输入
4
9 8 17 6
样例输出
3
数据范围
1<A[i]<10000,1<n<100
样例解释
有4 堆纸牌,数量分别为:9、8、17、6,移动3次可达到目的:
第1次:从第 3 堆取 4 张牌放到第 4 堆:9、8、13、10
第2次:从第 3 堆取 3 张牌放到第 2 堆:9、11、10、10
第3次:从第 2 堆取 1 张牌放到第 1 堆:10、10、10、10
----------------------------------------------------------
题目分析
太水了,不想说什么,权当水一帖吧
因为第一堆只能从第二堆移过来,那么从第一堆开始,从第二堆移(avg-heap[1])张到第一堆
现在第一堆达到了avg,那么第二堆离avg差的肯定只能从第三堆拿了
以此类推,既然第i堆纸牌离平均值相差(avg-heap[i])张,那么从i+1堆上移(avg-heap[i])张过来
反正如果不做贪心迟早都会移过来那么多,还不如直接一次性移完
----------------------------------------------------------
代码
#include <iostream>#include <algorithm>#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>#include <set>#include <queue>#include <stack>#include <vector>#include <map>#define hashsize 1000003#define inf 0x7f7f7f7fusing namespace std;int heap[105],n,tot,ans,avg;int main(){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&heap[i]);tot+=heap[i];}avg=tot/n;for(int i=1;i<=n;i++){if(heap[i]!=avg) ans++;heap[i+1]=heap[i+1]-(avg-heap[i]);heap[i]=avg; for(int j=1;j<=n;j++){if(heap[j]!=avg) break;if(j==n){printf("%d",ans);return 0;}}}return 0;}
- 一中OJ #1341 均分纸牌 [NOIP 2002T1] | 贪心 | 解题报告
- NOIP 2002 均分纸牌
- 洛谷Oj-均分纸牌-贪心
- codevs 1098 均分纸牌 模拟 解题报告
- NOIP 2002提高组 均分纸牌
- [NOIP提高组2002]均分纸牌
- [贪心]NOIP2002 均分纸牌
- 贪心之均分纸牌
- codevs1098 均分纸牌(贪心)
- 【codevs1098 均分纸牌】贪心
- vijosp1123-贪心-均分纸牌
- 一中OJ #1086 最大子矩阵 | 贪心连续子序列 + 平面降维压缩 | 解题报告
- 【p1031-均分纸牌】解题记录
- 贪心算法-均分纸牌-JAVA
- codevs均分纸牌 贪心算法
- 贪心-codevs-1098均分纸牌
- codevs 1098 均分纸牌【贪心】
- Codevs 1098 均分纸牌 贪心
- 汇编语言 笔记
- 学生排队
- 对拍模板
- 关于redux+react的一些思考
- F
- 一中OJ #1341 均分纸牌 [NOIP 2002T1] | 贪心 | 解题报告
- Linux命令补充
- 数据挖掘_相似项的发现
- 计算机组成原理小结
- 程序执行
- 第四讲 随机思想的发展与应用
- 线程问题<1>
- 用Math.random()方法生成随机数
- VS2013+opencv3.3+opencv_contrib_3.3配置