首页 > 其他分享 >Codeforces Round 882 (Div. 2) 题解

Codeforces Round 882 (Div. 2) 题解

时间:2023-08-06 09:55:41浏览次数:49  
标签:882 cnt 题解 线段 个数 区间 Div now 我们

A. The Man who became a God

求出相邻两个元素的差值,去掉前 \(m\) 个大的差值以后的差值和即为答案

B. Hamon Odyssey

由按位与的性质可以知道,前缀与和 的值只会越来越小,只要和为 \(0\) 的时候我们就清空按位与前缀和,增加一下次数,如果最终次数不为 \(0\),特判一下,次数加一即可

C. Vampiric Powers, anyone?

由于异或有以下性质:

\[a\oplus b\oplus b=a \]

所以每一次我们在最后添加数字时,都相当于消掉序列尾部的一段区间

又因为我们在选择区间时可以不选头部一段区间,所以题目相当于求 \(a\) 序列的区间异或最大值

这个东西可以使用 0/1-Trie 维护

D. Professor Higashikata

首先从原字符串中要提出 \(m\) 个子串合并,通过交换操作使字典序最大,那么我们可以处理出原字符串中每个字符的优先级。我们将处理出来的优先级拼接起来作为字符串 \(p\)

直接扫一遍是平方级别的,用线段树标记打过的 \(tag\) 并跳过可以优化到 \(O(n\log n)\)

接下来就是计算操作次数。容易发现把 \(s\) 中的所有 \(1\) 放在 \(p\) 的开头位置即可,换句话说就是拿 \(1\) 的个数 \(cnt\) 去补在 \(p\) 的开头。所以我们只要维护 \(cnt\) 的值和 \(p\) 中 \([1,cnt]\) 中 \(0\) 的个数即可,因为在 \([1,cnt]\) 中的 \(0\) 总能找到后面的 \(1\) 补上

注意 \(cnt\) 可能大于 \(p\) 的长度,所以线段树的上界要 \(\min(cnt,tot)\),\(tot\) 代指 \(p\) 的长度

那么后面显然是一个单点修改和区间加,用线段树维护即可

E. Triangle Platinum?

交互题

由于 \(n\le 5000\),所以 \(5500−5000=500\),考虑一下该如何利用这 \(500\) 次操作

我们如果对于一个长度为 \(k\) 的序列暴力,那么我们需要消耗 \((_3^k)\) 次操作,时间复杂度为 \(O(2^{2k}k^3)\)

我们选定 \(k=9\),那么根据抽屉原理,这 \(9\) 个数中,必然有一个数出现至少 \(3\) 次

直接暴力找出这个数,记为 \(s\),这三个数下标为 \(x,y,z\),然后开始分类讨论。

  1. \(s=1\),那么我们顺序扫过去,当前为 \(now\),如果询问 ? x y now 结果不是 \(0\),那么我们可以确定 \(a_{now}=1\),否则确定 \(a_{now}\not=1\)

    接下来我们拿出 \(a_{now}\not=1\) 的 \(k\) 个数来暴力,这样就可以归类到第二种情况

  2. \(s\not=1\),考虑这个时候询问 ? x y now 的结果对于不同的 \(a_{now}\)来说必定不同,所以我们直接扫一遍就可以了

时间复杂度 \(O(2^{2k}k^3)\)

F. The Boss's Identity

(待补)

标签:882,cnt,题解,线段,个数,区间,Div,now,我们
From: https://www.cnblogs.com/cantorsort2919/p/17609107.html

相关文章

  • 【反思】洛谷8月月赛 Div.2 & RiOI Round 2 赛后反思
    RiOIR2赛后反思赛时开了一个T1,但是\(0pts\),然后就跑去跟人对线然后复盘(主要是我的锅,我忘记对线怎么开始的了)到了吃饭(雾不过本来我也不会做,不能怪人家赛后是shenshen教我T1+看的若归老师的反思捏推歌:歌爱ユキ&稲葉曇《キミに回帰缐》(希望没打错是我的错吗铅笔......
  • abc313D 题解
    [abc313DOddorEven]。好有趣捏。我们考虑\(N=K+1\)。设\(s_i\)为\(\displaystyle\sum_{j\neqi}a_j\bmod2\)。因为\(K\)为奇数,我们可以得到\(\displaystyle\sum_{i=1}^{K+1}s_i\equiv\sum_{i=1}^{K+1}a_i\pmod2\)。所以\(a_i=\displaystyle\sum_{i=1}^{K+1}a_i\b......
  • Nule 题解
    1.题意简述:给定一个N行N列的非负整数方阵,从左上角(1,1)出发,只能向下或向右走,且不能到达值为0的方格,求出一条到达右下角的最佳路径,所谓最佳路径是指途径的数的乘积的末尾连续的0最少。2.样例解释:41300082256503015742这个样例有多重走法,这里给出两个:1.1->......
  • Codeforces Round 882 (Div. 2)
    CodeforcesRound882(Div.2)ATheManwhobecameaGod给定一个数组\(\{x_1,x_2,\cdots,x_n\}\)和一个整数\(k\),记\(f(l,r)=\sum_{i=0}^{i\ler-l}|x_{l+i}-x_{l+i+1}|\),求将数组划分为\(k\)个部分的划分方案,使得对每个部分的\(f(l,r)\)之和最小.​ 将两数相......
  • P4426 [HNOI/AHOI2018] 毒瘤 题解
    P4426[HNOI/AHOI2018]毒瘤题解非常好虚树题目,融合了容斥的内容。简化题意给定一张\(n\)个点、\(m\)条边的图,求图的独立集个数。其中\(n\leq10^5\),\(n-1\leqm\leqn+10\)。独立集:对于图\(G(U,E)\)的一个点集\(S\),\(\forall(u,v)\inE\),不存在\(u\inS\)且......
  • Codeforces Round 885 (Div. 2) C. Vika and Price Tags
    C.VikaandPriceTagsC-VikaandPriceTags题意:​ 初始两串数列\(a,b\),对于第\(i\)个数,令\(c_i=|a_i-b_i|\),然后将数列\(a=b,b=c\)。重复这样的操作,问是否可能让\(a\)串全部变成0。思路:这题实际上之前已经发过,但最近打牛客对这题有了新的理解,所以来记录一下。​ ......
  • 【LGR-150-Div.2】洛谷 8 月月赛 I & RiOI Round 2
    比赛实况赛前看了眼难度分布,红橙黄绿,感觉随便杀(爆我)顺序开题,先看A题,没仔细读,一眼以为单次操作只能翻转一位,写了个十进制转二进制找不同,结果WA了。再看了一眼题,发现题干定义的操作可以一次操作很多位,然后一个操作是把0变1,另一个是把1变0。所以只需要看两个数二进制对......
  • String Game 题解
    题目传送门一道二分题。\(|p|\le2\times10^6\),考虑\(O(n\logn)\)的算法,而又要输出最大值,不难想到二分答案。二分删除字母的数量,用一个数组将删掉的字母的下标存起来,然后判断删除字符后的\(t\)是否是\(p\)的子序列即可。Code#include<bits/stdc++.h>#definelllong......
  • Painting the Fence 题解
    题目传送门一道枚举题。我们可以直接枚举那\(2\)个去掉的粉刷匠。先统计一下每个栅栏会被多少个粉刷匠刷到,然后枚举第一个被去掉的粉刷匠,然后计算剩下的粉刷匠会将每个栅栏刷到多少次,我们只需要看只能被刷\(1\)次的栅栏就行了。接着处理一个前缀和数组,记录前\(i\)个栅栏......
  • Vanya and Brackets 题解
    题目传送门一道枚举题。枚举左括号和右括号的位置括号,为了答案最优,左括号只能在开头或者*的右边。右括号只能在末尾或者*的左边。每一次枚举都计算一下这个加了括号后表达式的值,最后取最大值即可。Code#include<bits/stdc++.h>#definelllonglong#defineINF1e9usi......