首页 > 其他分享 >P1031 [NOIP2002 提高组] 均分纸牌

P1031 [NOIP2002 提高组] 均分纸牌

时间:2024-07-17 15:07:43浏览次数:7  
标签:NOIP2002 纸牌 int 后面 ans sum P1031

简单贪心题。

如果每个数相等时的数为sum,考虑一个数不等于sum,最好的情况通过一次转移使它变为sum。

所以按顺序处理,当前数少从后面拿,当前数多向后面扔,中间记录次数即可。

考虑正确性,有人会觉得,如果后面的数不够拿成为了负数,需要从更后面拿,就不止一次转移了。

其实,如果遇到上述情况,可以先做后面的数从更后面拿数的操作,再做当前数拿数操作,这样操作总数不变。

由此可证,只要不等于sum,拿一次就好了。

#include <bits/stdc++.h>
using namespace std;
int n,a[110],sum,ans;
int main()
{
    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++)
    {
        if(a[i]>sum) ans++,a[i+1]+=a[i]-sum;
        else if(a[i]<sum) ans++,a[i+1]-=(sum-a[i]);
    }
    printf("%d",ans);
    return 0;
}

 

标签:NOIP2002,纸牌,int,后面,ans,sum,P1031
From: https://www.cnblogs.com/storms11/p/18307432

相关文章

  • 问题 I: 深入浅出学算法051-均分纸牌
    题目描述有N堆纸牌,编号分别为1,2,…,N。每堆上有若干张,但纸牌总数必为N的倍数。可以在任一堆上取若干张纸牌,然后移动。       移牌规则为:在编号为1堆上取的纸牌,只能移到编号为2的堆上;在编号为N的堆上取的纸牌,只能移到编号为N-1的堆上;其他堆上取的纸牌,可......
  • 贪心经典例题:均分纸牌
    希望粉丝破50. 贪心实际上就是把眼前的利益最大化,如果你要做出这道题你一定要找出贪心原则。贪心原则https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E8%B4%AA%E5%BF%83%E5%8E%9F%E5%88%99&fenlei=256&rsv_pq=0xb087efe300ab5a2d&rsv_t=78216%2Bh......
  • PHP历理 计算24点纸牌游戏
    <?php/*demo*/$tf=newTwentyFourCal();$tf->calculate(array(4,8,8,8));$tf->calculate(array(10,10,4,4));$tf->calculate(array(4,4,4,4));$tf->calculate(array(1,2,1,2));$tf->calculate(array(5,6,7,8));classTwentyFourCal......
  • CSP历年复赛题-P1037 [NOIP2002 普及组] 产生数
    原题链接:https://www.luogu.com.cn/problem/P1037题意解读:一个长整数,有若干数字替换规则,计算可以转换成多少种不同的整数。解题思路:看题之后,第一感觉,是用DFS:1、用字符串存储整数2、用领接表存储数字替换规则,因为一个数字可以替换成多个其他数字3、在dfs中,枚举字符串每个数字......
  • CSP历年复赛题-P1002 [NOIP2002 普及组] 过河卒
    原题链接:https://www.luogu.com.cn/problem/P1002题意解读:从A(0,0)点走到B(n,m)点,只能向右或者向下,C点以及其控制点不能走。解题思路:根据题意,此题要么递归(DFS),要么递推(动态规划)先分析数据规模,最大从起点到终点要走40步,每个步有2种走法,一共240种路径,DFS会超时,且方案数必须用longlong......
  • CSP历年复赛题-P1035 [NOIP2002 普及组] 级数求和
    原题链接:https://www.luogu.com.cn/problem/P1035题意解读:根据公式模拟法求解即可。解题思路:枚举i,计算sum,如果sum>k,则输出i100分代码:#include<bits/stdc++.h>usingnamespacestd;intmain(){intk;cin>>k;doublesum=0;inti=0;while(......
  • CSP历年复赛题-P1036 [NOIP2002 普及组] 选数
    原题链接:https://www.luogu.com.cn/problem/P1036题意解读:题目即要在n个数中,枚举出所有的子集,当子集中数字个数刚好为k时,求和,判断是否是素数。解题思路:方法一:二进制法通过二进制法,可以枚举一个集合中所有元素“选”或者“不选”的情况,用二进制1表示选该元素,二进制0表示不选。......
  • P1036 [NOIP2002 普及组] 选数
    传送锚点:https://www.luogu.com.cn/problem/P1036题目描述已知\(n\)个整数\(x_1,x_2,\cdots,x_n\),以及\(1\)个整数\(k\)(\(k<n\))。从\(n\)个整数中任选\(k\)个整数相加,可分别得到一系列的和。例如当\(n=4\),\(k=3\),\(4\)个整数分别为\(3,7,12,19\)时,可得全部的组合......
  • 洛谷 P1031 [NOIP2002 提高组] 均分纸牌 题解
    题目简述有$N$堆纸牌,编号分别为$1,2,\ldots,N$。每堆上有若干张,但纸牌总数必为$N$的倍数。可以在任一堆上取若干张纸牌,然后移动。移牌规则为:在编号为$1$堆上取的纸牌,只能移到编号为$2$的堆上;在编号为$N$的堆上取的纸牌,只能移到编号为$N-1$的堆上;其他堆上取的纸牌,可......
  • 纸牌游戏(超长大模拟)
    根据题意模拟即可,但这代码......CODE:#include<bits/stdc++.h>usingnamespacestd;inti[20]={0},t[20]={0},m[20]={0},ton[4][10]={0},z[10]={0},cmp[4][10]={0},zz[10][10]={0};intread(){ chara;intn;boolz=true; while(1) { a=getchar(); if(a>'9&#......