zoukankan      html  css  js  c++  java
  • [转]MegCup2015初赛题

    原文链接

    门票题:数独有多少种对解线上没有1的填法?
    这道“门票题”虽说只是“热身”,但还是有一定难度的。共有245名选手通过各种方法拿到了门票。下面,我们就为大家总结了一下各种解这道题的方法。

    Solution 1:暴力搜索!
    数独一共只有 6,670,903,752,021,072,936,960种解法。 并且,在考虑对称性之后,只剩下了 5,472,730,538 种“本质不同”的数独解法。(见wikipedia Mathematics_of_Sudoku)。所以,做这题最暴力的方法就是枚举对称意义下的等价类,之后对每个等价类分别计数即可。当然,这只是一种“理论上”可行的做法,实际要真这么做的话,你的机器要足够好哟。为了确保答案的正确性,我们用了一种和这个类似的方法来验证我们的答案。

    Solution 2:对称性
    很显然的是,对于一种数独的解法,我们只关心它里面1的位置。一个很自然的想法就是,我们算一算数独解法中对角线没有1的“比例”。已知数独有6,670,903,752,021,072,936,960种解法。通过在每个3x9或9x3的“带”内交换行或者列,可以把每66666*6=46656个解法(带内部置换有3!=6种方法,一共有6个带)分成一组,共有142980618827612160组。不管你是猜的还是证的,你会发现,每一组内对角线不含1的比例都是一样的!这样,我们只需要任取一个解,通过置换生成它组内的46656个解法,检验一下对角线不含1的比例就行了。如何任取一个解呢?看看海报,上面就印着字典序意最小的那个解。这样算出的答案是:
    6670903752021072936960 * 43/486 = 590223994520382996480

    Solution 3:手算!
    当然,如果你是用这种方法来做这题的,那么你应该不用来看这份题解了。不过,我们真的亲眼目睹过一位同学在草稿纸上用15分钟就算出来了!这么解的精髓就是充分利用对角线图案本身的对称性,使用容斥原理把问题分成几种情况来讨论。具体的方法我们就不剧透了,想挑战自我的同学自行体会一下吧:-)
    这一次可以提示一下,仔细观察数独格子交点,还能找到别的做法,

  • 相关阅读:
    WPF之感触
    C# WinForm 给DataTable中指定位置添加列
    MyEclipse 8.6 download 官方下载地址
    将博客搬至CSDN
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/6637735.html
Copyright © 2011-2022 走看看