zoukankan      html  css  js  c++  java
  • 模拟66 题解

    A. 棋盘

    打表发现$ans_i=ans_{i-1}*i+[i$&$1]?-1:1$

    然后写高精度就完了。

    所以这个式子的原型其实是:

    $ans_i=ans_{i-1}*(i-1)+ans_{i-2}*(i-1)$,

    其含义可以直接画图理解。

    对于前一个ans的每一种方案,

    可以任取一个放在最后一行,这个贡献是$ans_{i-1}$。

    对于前一个ans中恰好一位不合法,放到了黑子上的一种方案,

    将它不合法的一位放到最后也可以贡献一种方案,这个贡献是使其它位合法,即$ans_{i-2}$。

    要证$ans_i=ans_{i-1}*i+[i$&$1]?-1:1$

    只要证$ans_i=ans_{i-1}*(i-1)+ans_{i-1}+[i$&$1]?-1:1$

    由$ans_i=ans_{i-1}*(i-1)+ans_{i-2}*(i-1)$

    只要证$ans_{i-1}+[i$&$1]?-1:1=ans_{i-2}*(i-1)$

    移项之后就可以得到$ans_{i-1}=ans_{i-2}*(i-1)+[i-1$&$1]?-1:1$

    带入$i=3$,正确性是显然的,所以这个式子可以归纳证明。

    另一个很好的做法是,将本题转化为错排问题,

    问题为:大小为n,满足第i个元素不排在第i位的排列有多少个。

    所以可以进行容斥。

    设$f(i)$表示至少i个元素排在了原位,那么有:

    $$f(i)=(n-i)!$$

    $$ans=sum limits_{i=0}^{n}(-1)^i inom{n}{i} f(i)$$

    $$ans=sum limits_{i=0}^{n}(-1)^i frac{n!}{i!}$$

    B. 传递

    直接按照给定的题意做,因为数据范围比较小,用$bitset$优化一下就可以AC。

    正解是:

    将P中的边插入图中,分别将Q中的边正反插入图中,

    如果两次插入后都可以成功拓扑排序,那么答案为T,否则答案为N。

    原因是:如果拓扑排序不能成功,那么该图中存在环。

    如果存在环,那么必定存在一种情况使得P或Q不传递。

    如果两次拓扑排序都成功了,因为两图的并图为竞赛图,那么P和Q都一定是合法的。

    C. 异或

    诡异的数位dp,并不会做。

  • 相关阅读:
    BOM和DOM
    前端CSS
    前端HTML
    索引 创建用户和授权 锁 事务
    多表查询 Naricat pymysql
    外键关联的修改 级联 修改表行记录的操作
    表的基础数据类型 MySQL的mod设置 表的约束
    数据库初识及操作命令
    LINUX 下LAMP之源码环境部署
    Nginx负载均衡配置实例详解【原】
  • 原文地址:https://www.cnblogs.com/skyh/p/11644288.html
Copyright © 2011-2022 走看看