zoukankan      html  css  js  c++  java
  • 2021-4-1考试

    2021-4-1

    考试第一题写了15分暴力,第二题写正解,第三题写41分暴力。最终第一题15->3,第二题100->95,不过好像没差多少。。

    下午似乎把第一题想出来了。晚上讲插头dp。

    2021-4-1 异或

    题意

    给出 (n) 个数,问有多少个子集(可重)满足这个子集不存在两个数满足 (a ext{xor} b< x)(x) 给定。

    题解

    我自己想的办法

    考虑给他建立一个 trie,然后从根开始往下看。如果根节点与两个儿子形成的边代表的位比 (x) 的最高位还要大,那么左右儿子其实是独立的。因为两个数如果来自两边,那么一定不会违反规则。所以根节点子树内选的方案数就是两个儿子的方案数的乘积。

    如果根节点与儿子之间的边没有 (x) 的最高位大(即一样或者小),并且 (x) 的这一位是 1,那么一定只能在左子树里选一个,右子树里选一个。如果某棵子树选了两个,那么一定不符合条件,因为肯定比 (x) 小了。具体对于左边一个数,顺着右边的儿子枚举是在哪一位开始比 (x) 大或者与 (x) 相等就行了。复杂度应该是 (nlog_2n) 左右?

    如果 (x) 这意味是 0 ,那么左边和右边随便选就行了,注意左边和右边都可以不选。

    题解的办法

    假设 (x) 一共有 (i) 位,那么将每个数的后 (i) 位去掉,并按照剩下的位分组。可以发现,同一组的数最多选 0 或 1 或 2 个,因为在 (x) 的最高位那一位上同一组内的所有数必须不同。

    总结

    关键点在于考虑到不同块之间的独立性,这需要多尝试,没有什么别的办法。大概感觉到不能选太多数,要不然会有两个数异或起来很小。

    2021-4-1 计数

    题意

    求所有长度为 (n) ,每个位置上的数可以是 ([1,k]) 中的整数的序列,(max{L(a)-x,0}) 的和。其中 (x) 是一个给定的常数。

    其中 (L(a)) 表示这个序列是 (a) ,他的最长连续相同段的长度是多少。

    题解

    考虑计算 (max{L(a)-x,0}ge a) 的序列数量。也就是计算 (L(a)ge x+a) 的排列数量。可以先枚举一共有多少段,再枚举有多少个 (L(a) ge x+a) 的段,来一个容斥就行了。

    然后可以列出来算式,算式有一块是:

    [inom{n}{m-1}inom{m}{i} ]

    可以考虑给第二块拆开,然后就变成:

    [inom{n}{m}inom{m}{k} ]

    直接使用一波组合恒等式:

    [inom{n}{k}inom{n-k}{m-k} ]

    会发现有一块是二项式定理,给他算出来,就可以 (mathcal O(nln n)) 计算结果了。

    总结

    直接做就完了,没有好总结的。

  • 相关阅读:
    JB的IDE可视化MongoDB、MySQL数据库信息
    爬取QQ音乐(讲解爬虫思路)
    selenium实现淘宝的商品爬取
    爬取中国福彩网并做可视化分析
    Django的学习进阶(二)———— name
    xpath获取一个标签下的多个同级标签
    selenium中动作链的使用
    Error: Cannot find module 'electron-prebuilt'
    error Invalid tag name "–save-dev": Tags may not have any characters that encodeURIComponent encodes
    TypeError:mainWindow.loadUrl is not a function
  • 原文地址:https://www.cnblogs.com/YouthRhythms/p/14607892.html
Copyright © 2011-2022 走看看