Luogu 1031 - 均分纸牌 - [有意思的思维题]
题目链接:https://www.luogu.org/problemnew/show/P1031
题目描述
有 $N$ 堆纸牌,编号分别为 $1,2,…,N$。每堆上有若干张,但纸牌总数必为 $N$ 的倍数。可以在任一堆上取若干张纸牌,然后移动。
移牌规则为:在编号为 $1$ 堆上取的纸牌,只能移到编号为 $2$ 的堆上;在编号为 $N$ 的堆上取的纸牌,只能移到编号为 $N-1$ 的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。
现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。
例如 $N=4$,$4$堆纸牌数分别为:
①$9$ ②$8$ ③$17$ ④$6$
移动 $3$ 次可达到目的:
从 ③ 取 $4$ 张牌放到 ④ $(9,8,13,10)$ -> 从 ③ 取 $3$ 张牌放到 ② $(9,11,10,10)$ -> 从 ② 取 $1$ 张牌放到① $(10,10,10,10)$。
输入输出格式
输入格式:
两行
第一行为:$N$($N$ 堆纸牌,$1 \le N \le 100$)
第二行为:$A_1,A_2, … ,A_n$($N$堆纸牌,每堆纸牌初始数,$1 \le A_i \le 10000$)
输出格式:
一行:即所有堆均达到相等时的最少移动次数。
输入输出样例
输入样例#1:
4
9 8 17 6
输出样例#1:
3
题解:
首先,由于总牌数是 $N$ 的整数倍,因此肯定是可以有解的。每个牌堆最终的牌数就是总牌数除以堆数,设为 $k$。
其次,任意相邻的两个牌堆之间,最多只进行一次移牌操作,否则就是多余操作(这是很显然的)。因此,不管怎么样,移动次数最多也就 $N-1$ 次。
那么,如何判断这个间隔是否需要进行移牌操作?
其实很简单,假设这个间隔是牌堆 $i$ 和 牌堆 $i+1$ 的间隔,那么只要前 $i$ 堆牌数之和不等于 $k \cdot i$,就要在牌堆 $i$ 和牌堆 $i+1$ 之间进行一次移牌操作。
原因也很简单,左边的牌数不对,右边的牌数自然也不对,如果不在当前这个间隔移牌,就不可能让左右两边的牌数变对,因此必须移牌。
AC代码:
#include<bits/stdc++.h>
using namespace std;
int n,k,s[];
int main()
{
cin>>n;
for(int i=,x;i<=n;i++) cin>>x, s[i]=s[i-]+x;
k=s[n]/n;
int ans=;
for(int i=;i<=n;i++) if(s[i]!=k*i) ans++;
cout<<ans<<endl;
}
Luogu 1031 - 均分纸牌 - [有意思的思维题]的更多相关文章
- luogu P1031 均分纸牌
题目很简单,但是可以学一学贪心策略 把纸牌均匀分布,从左往右推掉不用的纸牌 #include <iostream> using namespace std; int main() { in ...
- [NOIP2005] 过河【Dp,思维题,缩点】
Online Judge:Luogu P1052 Label:Dp,思维题,缩点,数学 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子 ...
- 洛谷 P4749 - [CERC2017]Kitchen Knobs(差分转换+dp,思维题)
题面传送门 一道挺有意思的思维题. 首先有一个 obvious 的结论,就是对于每个炉子,要么转到哪里都符合条件,要么存在唯一的最大值.对于转到哪儿都符合条件的炉子我们 duck 不必考虑它,故我们只 ...
- NOIP2002 均分纸牌
题一 均分纸牌 (存盘名: NOIPG1) [问题描述] 有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若于张纸牌,然后移动. 移牌规则为: ...
- 【洛谷p1031】均分纸牌
[博客园的第一条随笔,值得纪念一下] 均分纸牌[传送门] 洛谷上的算法标签是 这道题是一道贪心题,过了四遍才过(蒟蒻有点废) 第一遍的时候考虑的非常少,只想到了求出平均数→求差值→从左往右加差值: 这 ...
- 洛谷 P1031 均分纸牌
P1031 均分纸牌 这道题告诉我们,对于实在想不出算法的题,可以大胆按照直觉用贪心,而且在考试中永远不要试着去证明贪心算法,因为非常难证,会浪费大量时间. (这就是你们都不去证的理由??) 这道题贪 ...
- 均分纸牌(Noip2002)
1320:[例6.2]均分纸牌(Noip2002) 时间限制: 1000 ms 内存限制: 65536 KB提交数: 3537 通过数: 1839 [题目描述] 有n堆纸牌,编 ...
- [CF1244C] The Football Season【数学,思维题,枚举】
Online Judge:Luogu,Codeforces Round #592 (Div. 2) C Label:数学,思维题, 枚举 题目描述 某球队一共打了\(n\)场比赛,总得分为\(p\), ...
- code vs 1098 均分纸牌(贪心)
1098 均分纸牌 2002年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 有 N 堆纸牌 ...
随机推荐
- VS Code 插件
https://blog.fundebug.com/2018/07/24/vs-extensions/
- mybatis插入一个对象后获取表中自增的主键Id并且传入到插入的的对象中,方便将对象中其他属性赋值给其他以前表主键Id作为非空字段的表
原本的sql语句为: <insert id="xx" parameterType="com.hrt.partner.model.ShopInsert"&g ...
- 【C#】解析C#中LING的使用
LING提供了一种从数据源中获取数据的方式,不同的语言已经形成了很多种关联的数据源.LING(Language Integrated Query,语言集成查询)提供一种通用的从不同的数据源中获取数据的 ...
- wamp 在本地安装PHP环境, 开启 curl 扩展
分别打开以下 2 个文件: wamp\bin\php\(your php version)\php.ini wamp\bin\Apache\(your apache version)\bin\php. ...
- java中random()函数用法介绍
Random() 创建一个新的随机数生成器. 代码如下 复制代码 Random(long seed) 使用单个 long 种子创建一个新的随机数生成器. 我们可以在构造Random对象的时候指定种子 ...
- mysql查询前几条记录
#My SQL 取前多少条select * from table LIMIT 5,10; #返回第6-15行数据 select * from table LIMIT 5; #返回前5行 select ...
- C#跑马灯,图片滚动,后台获取图片地址。动态绑定图片,imag显示文字
下面附下载地址. http://download.csdn.net/download/njxiaogui/10002058 1.跑马灯效果,图片连续循环滚动,图片下面并可附文字描述,图片是从数据库中获 ...
- Irrlicht 3D Engine 笔记系列 之 自己定义Animator
作者: i_dovelemon 日期: 2014 / 12 / 17 来源: CSDN 主题: Custom Animator, Referenced count 引言 在昨天的文章<Irrli ...
- 两台linux服务器各有两个不同的用户 其中一个服务器可以无密码登录服务器
服务器A:普通用户USERA 服务器B:普通用户USERB 把USERA的公钥写入服务器B用户USERB的authorized_keys中 USERA能普能用户登录然后服务器A,然后再登录服务器B: ...
- mac os下不同工具go env下gopath显示不同
设置 vim ~/.zshrc 设置 vim ~/.bash_profile