zoukankan      html  css  js  c++  java
  • wikioi 1098 均分纸牌

    题目描述 Description

    有 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)。

    输入描述 Input Description

    第一行N(N 堆纸牌,1 <= N <= 100)
    第二行A1 A2 … An (N 堆纸牌,每堆纸牌初始数,l<= Ai <=10000)

    输出描述 Output Description

    输出至屏幕。格式为:
    所有堆均达到相等时的最少移动次数。‘

    样例输入 Sample Input

    4
    9 8 17 6

    样例输出 Sample Output

    3

    该如何均分纸牌呢,在移动牌的时候,尽量把多出的纸牌移向最近的并且缺牌的牌中,要是一堆纸牌的数量超出平均数,那么至少要移动一次,如果,纸牌的数量少于平均数,也至少要移动一次,如下:

    有4堆牌: ① 11 ② 6 ③ 15 ④ 8 

    用cnt 要存移动次数,因为平均数是10,从左向右遍历,先是11,因为 11-10=1,超出了1,那么从这里肯定要移动到右边的牌。到了6时,因为前面有多余的部分1,那么cnt要加一,表示,前面要移动一次到当前纸牌中,才能保证前面的纸牌数达到要求。然后,6+1-10 = -3,表示,到6时,纸牌缺3张。到了15时,因为前面缺牌3张,所以,cnt加一,表示,要分一些牌给左边,才能使前面的牌都满足要求,此时,15-3-10 = 2,表示,到15时,多出了2张牌,继续,到了8时,因为前面多出了2张牌,所以,要移动到这里使左边的牌都满足要求,cnt加一,此时,8+2=10,刚好,满足要求。

    总结一下,要是到了当前的牌时,如果前面多出的牌数不等于0的话,cnt就要加一,表示要多移动一次牌,才能使左边的牌都满足要求。代码如下:

    /*
      作者:t_rex
      题目:p1098 均分纸牌
    */
    #include <iostream>
    using namespace std;
    int c[101] = {0};
    void avg(){
        int n, i = 0, dist = 0, cnt = 0, sum = 0, av;
        cin >> n;
        for(; i < n; i++) {
            cin>>c[i]; 
            sum += c[i];
        }
        av = sum / n;
        for(i = 0; i < n; i++){
           if(dist != 0) cnt++;
           c[i] += dist;
           dist = c[i] - av;
       }
       cout<<cnt<<endl;
    }
    
    
    int main()
    {
      avg();
      return 0;
    }
    




    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    MFC Windows 程序设计>WinMain 简单Windows程序 命令行编译
    AT3949 [AGC022D] Shopping 题解
    CF643D Bearish Fanpages 题解
    CF643C Levels and Regions 题解
    CF241E Flights 题解
    CF671C Ultimate Weirdness of an Array 题解
    CF1592F Alice and Recoloring 题解
    GYM 102452E 题解
    CF494C Helping People 题解
    P5556 圣剑护符
  • 原文地址:https://www.cnblogs.com/Rex7/p/4752548.html
Copyright © 2011-2022 走看看