首页 > 其他分享 >P4875 题解

P4875 题解

时间:2023-12-31 21:44:56浏览次数:30  
标签:编码 奶牛 int 题解 查询 P4875 端点 从右

显然这道题的解法与 \(8\) 强相关。从这一点下手,我们不难想到先对每一种奶牛做前缀和,这样我们可以做到 \(O(8)\) 查询每个区间是否可行,从而有了一个 \(O(4n^2)\) 的纯暴力做法。不知道多少 pts,反正不是正解。
下一步我们考虑优化。如果我们能快速地找到哪些区间是合法的,那么时间复杂度显然会大大降低。那么我们考虑对每个点编码,要同时把两个目的压缩在一个编码函数中,即每种奶牛出现的次数和出现的奶牛种类。我们不难写出下面的编码:

ull myEncode(int encoder, int i) {
    int first = 0;
    for (; first <= 7; first++)
        if (encoder & (1 << first)) {
            break;
        }
    ull ret = 0;
    for (int j = first + 1; j <= 7; j++)
        if (encoder & (1 << j))
            ret = (ret * 1001) + sum[i][j] - sum[i][first];
    return ret;
}

其中,\(encoder\) 状压的表示了哪些奶牛种类出现了,而 \(i\) 就是我们要编码的点。不难发现,如果两个点的前缀和之差(这里是八个颜色分别做差)相等,且选取的奶牛种类相等,那么编码值也相等。

接下来考虑每次加入一个端点怎么快速查询。先考虑从右端点,从右向左的加入端点,每次检查;同时考虑枚举所有出现奶牛的集合,并查编码值。这两种一个是 \(O(n^2)\) 的,一个是 \(O(2^8n)\) 的,都不优。我们把它们结合起来,可以从右向左依次加入某个颜色最后一个出现的位置,可以证明颜色出现的集合其变化不会超过八次。每次加入的时候强制选择这头奶牛,然后对此时的编码进行查询,若查询到就更新答案。
最后还有一个小问题:怎么修改。答案是直接暴力枚举端点然后暴力修改即可。时间复杂度可以接受。
代码是比较好写的,就不放了。核心的编码已经给出,如果你总是 WA,不妨考虑你的编码是否正确。

标签:编码,奶牛,int,题解,查询,P4875,端点,从右
From: https://www.cnblogs.com/Piggy424008/p/17938045/p4875-ti-jie

相关文章

  • P5138 题解
    因为本题的代码难度远大于解法的思考,因此这里提供一种好写的写法。做法不再赘述,就是转化为\(depth\)差以后上线段树分别维护两个信息以后求和。题解中大多数使用同一个线段树维护两个信息,可读性并不高,且比较难写。事实上我们注意到两棵线段树仅有初始的信息不一样,剩下需要支持......
  • P4434 题解
    远古模拟赛里的一道题,前来写篇题解记录一下。我们考虑一个显然的转化。将每条边染色,那么原问题等价于求下面的染色的方案数:对于每个点对\(a,b\),我们记\(\operatorname{lca}(a,b)=c\)有\(a\simc\)上的所有边同色。\(b\simc\)上的所有边同色。\(a\simc\)和\(b\simc......
  • CF958E1 题解
    Meaning在二维平面内,有位置不同且不存在三点共线的\(R\)个红点和\(B\)个黑点,判断是否能用一些互不相交的线段连接每一个点,使得每条线段的两端都分别是黑点和白点。Solution当\(R\ne{B}\)时,显然无法实现红点与黑点的两两组合,故题干所述的情况一定不存在。当\(R=B\)时,我......
  • P5765 [CQOI2005] 珠宝 题解
    P5765[CQOI2005]珠宝题解思路好题,注意到有性质:颜色数最多为\(\lfloor\log_2n\rfloor+1\),有了这个性质之后直接树形DP糊上去就过了。简要的证明:考虑一个点,显然一种颜色即可。对于一个颜色为\(c\)的点,其儿子至少有\(c-1\)个,且为\(1\simc-1\)的排列,这样可......
  • P2898 [USACO08JAN] Haybale Guessing G 题解
    题目传送门前置知识二分答案|并查集解法对条件的合法性判断其他题解已经讲得很明白了,这里不再赘述。这里主要讲一下用并查集实现黑白染色问题。以下内容称被覆盖为黑色,不被覆盖为白色。本题因为是单向染色,即从白到黑,故可类似luoguP1840ColortheAxis和D的并查集或......
  • 二叉树面试题解析
    二叉树面试题解析判断相同的树/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(){}*TreeNode(intval){this.val=val;}*TreeNode(intval,TreeNode......
  • 剑指Offer Java题解(前3道题)
    目录1.二维数组中的查找2. 替换空格3. 从尾到头打印链表1.二维数组中的查找题目链接:传送。方法一,暴力枚举。参考代码:packageproblem01;/***@Authorsyrdbt*@Date2019/7/314:05*二维数组中的查找*方法一,暴力枚举*/publicclassSolution{publicboole......
  • 杭州电子科技大学2023新生赛 E 树 题解
    Question杭州电子科技大学2023新生赛E树给定一颗包含\(n\)个节点的带边权的树,定义\(xordist(u,v)\)为节点\(u\)到\(v\)的简单路径上所有边权值的异或和有\(q\)次询问,每次给出lrx求\(\sum_{i=l}^rxordist(i,x)\)的值Solution考试的时候脑子坏了对于一条......
  • 【省选联考2020】树 题解
    省选题解第一发~【省选联考2020】树我和这道题还挺有缘分的。有一次看大佬的省选游记(不知道是哪一年),然后提到有一道是01trie整体加一,当时我就印象深刻,然后在oiwiki上看了一下,心想这整体加一也只能从低位到高位维护01trie啊,又不能查询最大值,有什么卵用(划掉)。这是两周前的事......
  • 题解 [SDOI2016] 游戏
    可以看出来出题人很想出一道把李超和别的什么东西凑起来的题目,于是给了这么一个缝合怪。https://www.luogu.com.cn/problem/P4069符号有点混乱。比如箭头又可以表示路径又可以表示赋值,代入语境应该还是好理解的。看到\(a\timesdis+b\)就应激反应出来是李超了,看到\(s\to......