JOISC 2015 简要题解

目前还在咕咕咕咕的题目:#3001. 「JOISC 2015 Day 3」AAQQZ,#3006. 「JOISC 2015 Day 4」防壁

#2994. 「JOISC 2015 Day1」复制粘贴 2

考虑时间倒流,维护每个位置是从哪里来的,那么对于第 i 次插入,设 li=biai+1, 对于位置 x

  1. x<ci,没有影响。
  2. cixci+li1,会变到 [ai,bi] 中相应的位置。
  3. x>ci+li1, 往前挪 li

复杂度为 O(KN)

#2995. 「JOISC 2015 Day1」愉快的标志设计

声明:因为是环,对于 [l,r] 这种表示形式,如果 r>n ,那么该区间代表 [l,n][1,rmodn+1]

维护几个 dp 数组,Fk,i 表示 [i,i+4k1] 要满足条件至少要几次操作,Jk,i,Ok,i,Ik,i 分别代表使得 [i,i+4k] 满足全是 JOI 至少要多少次操作,转移显然,注意空间可能不够,需要滚动数组优化。

可能也不算 DP,但确实是一种转移。

#2996. 「JOISC 2015 Day1」有趣的家庭菜园 2

首先从前往后考虑,在当前情况下,记 costi 表示保证高度为 i 的 IOI 草能够存活下所获得的最大贡献,同时记 fi 表示 i 位置的 IOI 草能够存活的最大贡献,然后每次有这样几种转移:

  1. fi=maxj=1Hi{costj}+Pi
  2. j[1,Hi1],costjcostjCi (必须拔了 i 号 IOI 草才能存活)
  3. costj=max(costj,fi)

然后题目的条件是,也就是只要有一边满足条件就行了,那么再倒着搞一遍算出 gi,然后

ans=max{fi+giPi}

减去 Pi 是因为贡献被算了两遍。

#2997. 「JOISC 2015 Day 1」卡片占卜

感觉这个转为最短路好高级啊。

首先将区间翻转变为 差分后的两个单点取反,我们最后的目标就是整个差分数组为 0

然后就有一个非常高级的操作:

如果我们选择翻转 (x,y1),(y,z),那么在差分数组上就是 x1,y1,y1,z 取反,也就是 x1,z 取反了。

感觉上面的是废话

然后有几种情况:

  1. B,D 翻转
  2. BC,CD 翻转
  3. BD,C 翻转

都可以用最短路的形式表示出来,跑一跑就行了。

#2998. 「JOISC 2015 Day2」Building 3

考虑 check A 序列是否合法。

如果对于每个 Ai, 存在一个 j<i,Aj+1=Ai ,那么就 ok 了。

可以记一个前缀 mx, 如果 t=i=2nmax(mximxi11,0)>1 那么显然无解。

对于 t=0,t=1 的情况,讨论一下在哪里插入就行了。

#2999. 「JOISC 2015 Day2」Keys

每个时间点都不同,极大程度上方便了情况的讨论。

考虑对于每个时间段分开讨论,对于时间段 [i,i+1],我们可以定位到对应的几个员工上,设 i 时间为员工 xi+1 时间为员工 y,那么有:

  1. x,y 都出去,如果 x 有钥匙,那么大门就可以关上。
  2. x 出去,y 进来,如果 x,y 都有钥匙,那么大门就可以关上。
  3. x 进来,y 出去,大门必定关上。
  4. x,y 都进来,如果 y 有钥匙,那么大门可以关上。

我们发现只有 情况 2 是要依赖前面人的情况的,那么可以连一条边 (x,y), 最后图将由若干条链组成,最后的问题就是:

  1. x 如果有钥匙,那么就有 tx 的贡献。
  2. x 和前面的人都有钥匙,那么就有 vx 的贡献。

因此设 fx,k,0/1 表示考虑到第 x 人,共分配了 k 把钥匙,x 是否有钥匙的贡献最大值就行了。

#3000. 「JOISC 2015 Day2」Road Development

树剖板子,不解释。

#3001. 「JOISC 2015 Day 3」AAQQZ

不会,正在咕咕咕咕。

#3002. 「JOISC 2015 Day 3」Card Game Is Great Fun

痛苦的回忆,不太想写。

当初考试用爆搜 + 卡时过了,但是 O(n3w) 正解写得要死。

贴个链接,正在咕咕咕咕。

#3004. 「JOISC 2015 Day 4」Inheritance

维护 K 个并查集,边权从大到小对于每条边去二分第一个两点不连通的并查集,然后加边就行了。

#3005. 「JOISC 2015 Day 4」Limited Memory

考虑将 <[ 视为 (,即为 +1,将 >] 视为 ),记为 -1, 然后前缀和 s, 就可以 check 了,如果这样都配不上不行,那么就不行了。

接下来就是考虑判断每次配对的两个是不是同种型号。

注意到允许的询问次数比 O(n2) 还多,那么我们可以考虑分层 check,每次 对于 s=dep 时,check两个字符是否配对,这样只需要记录:

最后一个 s=dep 时的型号 ( 01 ) ,当前 pos(0n),前缀和 s(0n),当前要 check 的 dep(1n),共 1+7+7+7=22 个二进制位,刚好用完。

有个玄学问题,压位的时候不同的方式会直接导致 WA,调了不知道多久,甚至现在没有发现问题。

#3006. 「JOISC 2015 Day 4」防壁

不会,正在咕咕咕咕。

posted @   Werner_Yin  阅读(512)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示