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;    
    }
  • 相关阅读:
    js联系题目
    js运算符
    太极图
    第一周 Welcome
    对 vscode 自动格式化的结果不太满意,我们该如何自己调整直至自己满意为止
    ASP.NET MVC5.0 OutputCache不起效果
    对照实验(1)-批量清理系统临时文件
    ES6
    19.局部变量和全局变量
    18.函数定义和参数
  • 原文地址:https://www.cnblogs.com/staginner/p/2712378.html
Copyright © 2011-2022 走看看