zoukankan      html  css  js  c++  java
  • RQNOJ 62 [NOIP2002]均分纸牌

    RQNOJ_62

        我们可以将牌在相邻堆之间的移动想象成经过了一条边,那么任意两堆相邻的牌之间都会有一条边,而且在最优情况下每条边应当是至多经过一次的,如果超过一次的话也可以通过相消变成至多经过一次。那么如何确定一条边要不要被走呢?实际上对于任意一条边来讲,都将牌划分成了左右两部分,如果两部分各自内部不能平衡的话就会通过这条边来达到平衡的目的。这样扫一遍前缀和就可以判定有多少条边需要经过了,而经过的边的数量就是最后的结果。至于可行性,由于最后需要经过的边都是有向的,所以会形成一个有向图,按有向图的方向移动牌即可。

    #include<stdio.h>
    #include<string.h>
    #define MAXD 110
    int N, a[MAXD];
    void solve()
    {
        int s = 0, n, cnt = 0;
        for(int i = 1; i <= N; i ++)
            scanf("%d", &a[i]), s += a[i];
        n = s / N;
        s = 0;
        for(int i = 1; i <= N; i ++)
        {
            s += a[i];
            cnt += s != n * i;
        }
        printf("%d\n", cnt);
    }
    int main()
    {
        while(scanf("%d", &N) == 1)
            solve();    
        return 0;    
    }
  • 相关阅读:
    RichEdit
    用 RAD Studio 柏林版创建 IoT 应用程序
    延时程序
    SQL if exists用法
    Firemonkey限制TEdit只能输入数字的完美方法
    leetcode 树
    leetcode string
    clone-graph
    surrounded-regions merge-intervals
    leetcode链表题
  • 原文地址:https://www.cnblogs.com/staginner/p/2712378.html
Copyright © 2011-2022 走看看