首页 > 编程语言 >2024牛客寒假算法基础集训营2

2024牛客寒假算法基础集训营2

时间:2024-02-18 17:02:32浏览次数:43  
标签:包含 端点 宝石 子段 线段 2024 牛客 答案 集训营

C. Tokitsukaze and Min-Max XOR

image-20240211194355680

题解:01 Trie

  • 观察后发现对序列 \(a\) 排序并不影响结果
  • 然后容易知道,对于 \(i < j, a_i \oplus a_j \leq k\) ,一共有 \(2^{i - j - 1}\) 种序列 \(b\) 满足条件,特别的,如果 \(i = j\),只有 \(1\) 种满足条件
  • 那么现在问题就转换为,我们固定 \(a_j\) 作为最大值,然后枚举 \(a_i\) \((i < j)\) 作为最小值,如果满足题目的限制条件,那么就统计对答案的贡献
  • 但是这样枚举显然是 \(O(n^2)\) 的,考虑优化
  • 由于是异或,我们考虑 01 Trie
  • 我们再将题目转化一下:对于每个 \(a_j\),其对答案的贡献为 \(1 + \sum_{i = 1}^{j - 1} 2^{j - i - 1}·(a_i \oplus a_j \leq k) = 1 + 2^{j - 1}\sum_{i = 1}^{j - 1} 2^{-i}·(a_i \oplus a_j \leq k)\)
  • 那么我们定义 \(a_i\) 的贡献为 \(2^{-i}\)
  • 然后就是在 01 Trie 上统计答案,类似求前缀中有多少个 \(a_i\) 使得 \(a_j \oplus a_i \leq k\)

D. Tokitsukaze and Slash Draw

image-20240211204137973

题解:最短路

  • 发现本题就是起点为 \(k\) ,终点为 \(n\) 的在模 \(n\) 意义下的最短路问题
  • 对于每种操作,考虑对每个位置 \(i\) 向 \((i + a_i)\mod n\) 建边,那么边数为 \(O(nm)\)
  • 然后直接跑 \(dij\) 即可

F. Tokitsukaze and Eliminate

image-20240211204549321

题解

Solution 1:贪心

显然利用 \(n\) 个 vector 记录每个颜色的位置,每次挑末尾位置最小的宝石删除即可,复杂度 \(O(n)\)

Solution 2: 贪心

我们考虑如果我们需要通过删除 \(i\) 来删除其后面的所有宝石,我们必须保证 \(i\) 后面没有和 \(i\) 颜色相同的宝石,定义 \(nxt[i]\) 为在第 \(i\) 个宝石后面与第 \(i\) 个宝石颜色相同的宝石所在位置,即必须保证此时末尾宝石在 \([i, nxt[i] - 1]\)

如果我们对每个宝石都考虑这个问题,那么题目就转化了一个经典的贪心模型:给定 \(n\) 条线段,求用最少的线段数覆盖区间 \([1, n]\)

Solution 3:线段树优化 dp

定义 \(dp_i\) 为消除 \(i\) 及其后面所有宝石的最小操作次数,转移显然为 \(dp[i] = \min_{j = i + 1}^{nxt[i]} dp[j]\)

线段树优化即可

H. Tokitsukaze and Power Battle

image-20240211205954902

题解

Solution 1:基于"区间查询最大子段和"思想

类似最大子段和,考虑线段树直接维护答案,合并时考虑 “减号” 所在位置:

  • 减号在左儿子那一段,答案为左儿子包含右端点的最大答案 - 右儿子包含左端点的最小子段和
  • 减号在中间,答案为左儿子包含右端点的最大子段和 - 右儿子包含左端点的最小子段和
  • 减号在右儿子那一段,答案为左儿子包含右端点的最大子段和 + 右儿子包含左端点的最大答案

线段树维护信息如下:

  • \(sum\):区间和
  • \(lmi\):包含左端点的最小子段和
  • \(rmx\):包含右端点的最大子段和
  • \(lans\):包含左端点的最大答案
  • \(rans\):包含右端点的最大答案
  • \(segans\):包含区间左右端点的整一段的答案
  • \(ans\):区间答案

信息之间的合并:

Solution 2:线段树维护式子

image-20240211210845889

image-20240211210915307

标签:包含,端点,宝石,子段,线段,2024,牛客,答案,集训营
From: https://www.cnblogs.com/Zeoy-kkk/p/18019573

相关文章

  • 2024-02-17-物联网C语言(5-指针)
    5.指针5.1关于内存那点事存储器:外存和内存 外存:长期存放数据,掉电不会丢失数据,如硬盘、光盘、ROM等 内存:暂时存放数据,掉电数据丢失,如RAM,DDR等内存:物理内存和虚拟内存物理内存:实实在在的存储设备虚拟内存:操作系统虚拟出来的内存操作系统会在物理内存和虚拟内存之间做映......
  • SMU Winter 2024 div2 ptlks的周报Week 3(2.12-2.18)
    这周主要加强了对知识点的掌握。P10161[DTCPC2024]小方的疑惑10从题目可以得知a个连续括号贡献为a(a+1)/2,代价为2a。要求总贡献恰为k,且代价不高于n。一开始我想到了模拟,先取一个贡献低于k最大的a,剩下的再直接在外面套括号,结果wa。又想到可以分出多个a来组成k,就用递归,每次......
  • 2024年首发!高级界面控件Kendo UI全新发布2024 Q1
    KendoUI是带有jQuery、Angular、React和Vue库的JavaScriptUI组件的最终集合,无论选择哪种JavaScript框架,都可以快速构建高性能响应式Web应用程序。通过可自定义的UI组件,KendoUI可以创建数据丰富的桌面、平板和移动Web应用程序。通过响应式的布局、强大的数据绑定、跨浏览器兼容......
  • VNCTF2024-WEB-gxngxngxn
    VNCTF2024-WEB-gxngxngxnCheckin签到题,直接看js文件CutePath按照上述穿越下可以看到一串base64加密的,解密后是账号密码:登录看到有新功能,可以重命名文件.我们找到flag.txt文件,但是不能查看,我们可以利用重命名将flag.txt文件传送到share_main目录下,这样我们就可以查看......
  • 从嘉手札<2024-2-17(2)>
    也不知是岁月过得qianjuan还是花落得匆忙父亲的白发一天天的多下去时至今日竟也满头华发了小时候的父亲总是高大恣意潇洒夏天的蝉鸣悠悠记忆里父亲总是躺在沙发上鼾声大作我蹲在门口用放大镜找那些不知死活的蚂蚁晚风悄悄的吹起天边的月牙我抬起头湛蓝色的天空宛若宝......
  • Toyota Programming Contest 2024#2(AtCoder Beginner Contest 341)(菜小白)
    A-Print341思路:给你一个整数N有N个0和N+1个1组成 01交替输出1 解法:输出10最后输出最后剩余的1即可Code:#include<bits/stdc++.h>usingnamespacestd;intmain(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);intN;cin>>N......
  • 从嘉手札<2024-2-17>
    父亲和鬼离村庄很远的地方有一片荒地,因为闹鬼,所以一直荒着。两年前,家里要修一个羊圈,选了几个地方都在火线内,无奈选了那里。用大砖修了一间大房,给羊住;用同样的砖修了一个小房,给牧羊人住。我不在家的时候,父亲和鬼们一起住,说是鬼,其实父亲都认识。其中的一大半,是父亲给烧的尸......
  • 2024 学习计划
    经常容易忘记东西,记录下来会好一点;时间安排:jdk8-source-code,预计Q1结束skywalking,预计Q2结束spring,预计Q3结束dynamoDB细节2024.2SkyWalking希望深入理解JavaAgent,字节码插桩、SPI、Arthas;希望搞清楚java编写的项目转成exe的方式;SkyWalking的官方......
  • 牛客2
    1.TokitsukazeandEliminate(hard)(easy难度可以通过暴力来进行,但是hard添加了颜色,我们需要从右往左找到最靠左的某一颜色的最后一个,那么我们可以先用map存图,存下当前剩下几种颜色,再用set一遍一遍重复清点颜色数量,一旦和map中颜色相同就消除一次)1#include<bits/stdc++.h>2......
  • 2024.2HL集训日记
    Day0五点起来赶飞机,困。典中典之“尊敬的Merlin旅客,您乘坐的CZ6439航班很快就要起飞了"。感谢Nihachu的带队。到HL被大气磅礴的校园被震撼到了,于是乎被震地睡了一下午(见识到了HL难吃的午饭,尤其是那个浓缩了0x7f吨酱油的干菜扣肉。晚饭同理,但有自动贩卖机。6点机房集合,自由......