zoukankan      html  css  js  c++  java
  • 2020意大利数学奥林匹克 第6题

    试题来源:http://olimpiadi.dm.unibo.it/wp-content/uploads/2020/09/Cesenatico_20.pdf

    在一个8×8的网格表中,每个单元格中都有一个骑士或一个骗子。骑士只会说真话,骗子只会说假话。已知每个单元格中的人都说“我所在的列中的骗子个数严格大于我所在的行中的骗子个数”,那么满足条件的布置方法可能有多少种?

    ·

    ·

    ·

    ·

    ·

    ·

    ·

    ·

    ·

    ·

    ·

    ·

    ·

    ·

    首先进行分类讨论。

    假设存在某列有8个骑士0个骗子,那么每行的骗子数应为负数,显然不行,所以不存在某列有8个骑士0个骗子。

    假设8列中含有骑士最多的一列有7个骑士1个骗子,不妨让该列在第一列且骗子为最后一个:

    这种情况下满足条件的只有下面一种情况:

     由于骗子的位置是任意的,所以这种情况一共有8种方案。

    假设8列中含有骑士最多的一列有6个骑士2个骗子,不妨让该列在第一列且骗子为最后2个,那么前六行有1个或0个骗子,假设前6行没有骗子,那么:

      由于骗子的位置是任意的,所以前6行没有骗子时一共有C82种方案。假设前6行存在某行有1个骗子,不妨令其为第一行,且骗子在第二列,那么由于第一行第二列这个骗子的存在,第二列应该有7个骑士,这与含有骑士最多的一列有6个骑士2个骗子矛盾,所以前6行不存在某行有1个骗子。所以8列中含有骑士最多的一列有6个骑士2个骗子时一共有C82种方案。

    根据相同的分析方式,可得到:

    当列中含有骑士最多的一列有5个骑士3个骗子时一共有C83种方案;

    当列中含有骑士最多的一列有4个骑士4个骗子时一共有C84种方案;

     当列中含有骑士最多的一列有3个骑士5个骗子时一共有C85种方案;

      当列中含有骑士最多的一列有2个骑士6个骗子时一共有C86种方案;

      当列中含有骑士最多的一列有1个骑士7个骗子时一共有C87种方案;

    所以最后的结果为:2*(8+C82+C83)+C84

  • 相关阅读:
    堆内存和栈内存
    链表
    爬虫---正则表达式
    剑指offer---二维数组中的查找
    基于C#开发的俄罗斯方块
    Java第十天
    软考错题合集之11-05-AM
    软考错题合集之11-11-AM
    软考错题合集之12-05-AM
    GOF之模板模式
  • 原文地址:https://www.cnblogs.com/lau1997/p/13811500.html
Copyright © 2011-2022 走看看