首页 > 其他分享 >JOISC 2018 题解

JOISC 2018 题解

时间:2023-05-15 23:00:18浏览次数:62  
标签:ac 题解 sum JOISC2018 JOISC 2018 https binom qoj

没做计算几何题和提交答案题。

JOISC2018 Day1 Construction of Highway 道路建设

注意到题目中的操作相当于就是到根的路径染色,我们离线下来进行树剖,每条重链维护连续段,然后显然均摊会修改 \(O(n\log n)\) 段。我们每次修改时可以取出所有连续段,然后题目问逆序对数,我们对这些连续段跑一次逆序对即可。复杂度 \(O(n^2\log n)\)。

https://qoj.ac/submission/104349

JOISC2018 Day1 Tents 帐篷

我们把行/列上的一对看成一组,每一组会消耗一行两列/两行一列。所以我们先枚举我们放几个横对,枚举放几个行对,枚举放几个列对,再枚举放几个单点,式子就长成这样(令 \(g(x)\) 表示 \(\binom{2x}{2;2;...;2}\))

\[\sum_x \binom{n}{x}\binom{m}{2x}g(x)\sum_y \binom{n-2x}{y}\binom{n-x}{2y}g(y)\sum_z \binom{n-x-2y}{z}\binom{m-y-2x}{z}z!4^z \]

把后面的东西拎出来,令 \(F(p,q)=\sum_z \binom{p}{z}\binom{q}{z}z!4^z\),我们把 \(\binom{p}{z}\) 拆了然后再把 \(z!\binom{q}{z}\) 化成 \(q(z-1)!\binom{q-1}{z-1}\),得到 \(F(p,q)=F(p-1,q)+4qF(p-1,q-1)\)。然后就可以 \(O(n^2)\) 做了。

https://qoj.ac/submission/104363

* JOISC2018 Day2 修行 Asceticism

即求欧拉数。

首先二项式反演,钦定有 \(k\) 个小于号,即 \(n-k\) 个上升连续段。一个上升段的 EGF 为 \(e^{z}-1\),\(n-k\) 个段的 EGF 即 \([\frac{z^n}{n!}](e^z-1)^{n-k}=\sum\limits_{i=0}^{n-k} (-1)^{n-k-i}\binom{n-k}{i}[\frac{z^n}{n!}]e^{iz}=\sum\limits_{i=0}^{n-k}(-1)^{n-k-i}\binom{n-k}{i}i^n\)。于是我们可以得到答案为

\[ans=\sum_{k} \binom{k}{m}(-1)^{k-m}\sum_i i^n(-1)^{n-k-i}\binom{n-k}{i}\\ = \sum_i i^n(-1)^{n-m-i}\sum_k \binom{k}{m}\binom{n-k}{i}\\ = \sum_i i^n (-1)^{n+m+i}\binom{n+1}{m+i+1} \]

https://loj.ac/s/1773669

JOISC2018 Day2 最坏记者3 Worst Reporter 3

我们考虑每个人往后走的长度一定是前一个的整数倍。于是我们预处理一下,把长度相同的并起来,然后每次询问暴力查看是否在区间即可。复杂度 \(O((n+q)\log n)\)。

https://qoj.ac/submission/104631

JOISC2018 Day3 比太郎的聚会 Bitaro’s Party

看上去不是很好维护,考虑根号分治,暴力维护。我们对于每个点维护能到达它的前 \(B\) 大的点,然后这个是可以直接转移时归并的。然后不能来的点数 \(\ge B\) 的时候就考虑直接暴力做。\(B\) 稍微小一点跑的会比较快。

https://qoj.ac/submission/104697

* JOISC2018 Day3 安全门 Security Gate

对于括号序列串 \(C\),设前缀和 \(S\) 和后缀和 \(T\),假设我们反转的区间为 \([l+1,r]\),令 \(r'=r+1\),那么合法当且仅当:\(S[1,l]\ge 0\),\(T[r',n]\ge 0\),\(S_{r}\le 2S_{l}\),\(S_r-S_l=S_n/2\)。我们对原串进行分类讨论。第一种,原串本身就是合法串,直接 DP。第二种,原串满足 \(S[1,n]\le 0\),但是存在 \(T_i<0\)。第三种,原串满足 \(T[1,n]\le 0\),但是存在 \(S_i<0\)。这两种情况对称。第四种,原串存在 \(T_i<0\) 且存在 \(S_i<0\)。

考虑第二三种如何处理。这时我们的决策一定是找到最小的 \(T_i<0\) 的位置 \(x\)(满足 \(x\) 处为右括号),在 \([1,x-1]\) 中取最早出现的 \(S_i\) 最大值的位置作为 \(l\),并贪心找 \(l\) 后面的第一个满足 \(S_r-S_l=S_n\) 的位置 \(r\)。我们令 \(S_l=a\),\(S_n=b\),则 $ S_r=a+b/2$,于是 \(T_{r'}=a-b/2\)。我们 DP \(g_{i,j,k}\) 表示对于 \([1,i]\),\(S_i=j\),前缀最大 \(S_i=k\),那么 \([1,x-1]\) 满足 \(S_l=j\) 的方案数为 \(g_{x-1,0,j}\)。设计 DP \(f_{u,i,j,0/1}\) 表示钦定 \(T_{r'}=u\),\([i,n]\),\(T_i=j\),\(i\) 是否已经在被翻转的区间中(\(i<r\))。而我们限制即 \(f_{i,*,1}=0\) 满足 \(*\neq u\)(因为钦定了 \(r\) 是第一个满足要求的),\(*\le 2u\)(对限制进行化简得到)。然后答案即 \(\sum_{u,i,j} g_{i-1,0,j} f_{u,i+1,2u-2j-1,[2j-u<-1]}\)。

然后考虑第四种如何处理。这时我们的决策对于 \(l\) 也是一样的,对于 \(r\) 要满足 \(r'\) 及之后的 \(T\) 都 \(>0\)。但是这需要满足 \(S_l+S_n/2\le S_r\)。但是其实如果我们把整个串翻过来然后左右括号反以下,发现如果正过来不满足这个条件那必然反过来后满足,唯一的问题是 $ S_l+S_n/2=S_r$ 时会算重,减掉就行了。考虑 DP。从 \(r\) 往 \(l\) 走,如果已经经历过 \(T<0\) 的话,那么这之后再出现 \(T_i=u\) 就无所谓了,于是还要加一个 \(f_{i,j,2}\) 表示目前已经经历过 \(T<0\) 了。然后其它都是差不多的。

https://qoj.ac/submission/105912

JOISC2018 Day4 糖 Candies

反悔贪心。用一个链表维护,然后每次把 \(a_i\) 变成 \(a_{pre}-a_i+a_{nxt}\) 即可。需要注意边界的情况,如果处理的是边界的点那么需要直接删掉。

https://qoj.ac/submission/104884

JOISC2018 Day4 图书馆 Library

首先我们 \(n\) 次问询问出第一个元素。然后我们考虑每次找到紧跟着这个元素 \(x\) 后面的那个元素。我们考虑维护一个候选集合 \(S\),每次选 \(S\) 中的一半,问一次 \(S\) 和一次 \(S\cup\{x\}\),就能判断后面那个元素是否在 \(S\) 中。

https://qoj.ac/submission/104885

JOISC2018 Day4 野猪 Wild Boar

每年就总有一道这种题,让人写的痛不欲生。

首先我们考虑对于一条路径,它真正有用的信息只有长度,和首尾两条边是什么。如果我们想要合并两条路径 \(X,Y\),我们只需要 \(X\) 的最后一条边和 \(Y\) 的第一条边不相等。我们维护 \((u,v)\) 之间的五条路径:最短路,钦定首边与最短路不同的最短路,钦定尾边与最短路不同的最短路,钦定首尾边都不同的最短路。然后我们就可以在线段树上维护询问了。

然后就是这些东西怎么求。我的sb做法是:对于每个边 \(s\to t\),记录 \(f_{u,0/1}\) 表示 \(s\) 出发且第一步是 \(s\to t\) 的最短/次短路,且保证次短路的尾边与最短路不同。这个有很多的细节。然后将所有记录下来的路径排序之后从前往后找路径。我的代码距离爆 1G 的内存,只差 0.8M。很危险。

https://qoj.ac/submission/105586

标签:ac,题解,sum,JOISC2018,JOISC,2018,https,binom,qoj
From: https://www.cnblogs.com/TetrisCandy/p/17403403.html

相关文章

  • Citect2018R2使用报警页面功能做操作记录1
    这一篇学习笔记我在新浪博客记录过,地址是Citect2018R2使用报警页面功能做操作记录1_来自金沙江的小鱼_新浪博客(sina.com.cn)这两天练习了做报警页面,稍微扩展一下,可以做操作记录功能。使用unityv13.1新建一个项目,简单配置一下硬件,新建变量: 新建程序段   这个练......
  • CITECT2018R2操作记录继续
    这一篇学习笔记我在新浪博客记录过,地址是CITECT2018R2操作记录继续_来自金沙江的小鱼_新浪博客(sina.com.cn)昨天学习练习了Citect2018R2操作按钮的事件记录实现方法,今天练习一下在画面上修改设定值的操作事件记录。还是在昨天项目程序的基础上来做。在PLC程序上新建变量 ......
  • citect2018R2报警函数练习1-做一个简单的报警显示页面
    这一个笔记我在新浪博客记录过,地址是Citect2018R2报警函数练习1-做一个简单的报警显示页面_来自金沙江的小鱼_新浪博客(sina.com.cn) 这两天看citect一些文档,想着练习一下Cicode的报警函数。新建一个Unity项目,简单的配一下硬件 写简单的程序新建一个Citect2018R2程序,使......
  • Citect2018R2报警页面练习1续:显示出报警状态
    这一篇学习笔记我在新浪博客记录过,地址是Citect2018R2报警页面练习1续:显示出报警状态_来自金沙江的小鱼_新浪博客(sina.com.cn)昨天练习了作业个报警信息页面,显示的报警无法区分是到来的还是离去的,有没有确认,虽然颜色上不一样,但操作人员显然不会去记忆每种颜色什么含义,需要有文......
  • Citect2018R2报警函数练习2:报警页面过滤报警
    这一片学习笔记我在新浪博客记录过,地址是Citect2018R2报警函数练习2:报警页面过滤报警_来自金沙江的小鱼_新浪博客(sina.com.cn)昨天练习了在页面上通过cicode控件和函数来做一个报警页面,包括翻页和报警确认。昨天对32个报警做了分类,分成4类和5类。如果希望报警页面只是显示4类报......
  • ORA-02049:超时:分布式事务处理等待锁 问题解决
    数据库添加DBLink后,很容易出现一个问题:ORA-02049:超时:分布式事务处理等待锁ORA-02063:紧接着line(起自ODS_LINK) 问题原因分析:第一次执行操作后出错,数据库没有提交或回退,未关闭原有数据库窗口,重新打开新窗口执行数据插入操作,报ORA-02049错误。解决办法:数据库登陆管理员账号查看1、......
  • 跨域问题解决记录Access-Control-Allow-Origin方法
      more_set_headers 'Access-Control-Allow-Origin: http://devops.opsenv.com';    more_set_headers 'Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS';    more_set_headers 'Access-Control-Allow-Headers: Authorization,DNT,......
  • el-popover无法弹出的问题解决
    1、不能再el-popover上⾯使⽤v-if进⾏显⽰隐藏,应该⽤v-show2、在每⼀个el-popover上都增加⼀个ref确定每个el-popover都是唯⼀的,:ref="`node-popover-${scope.row.id}`"3、需要使⽤slot="reference"定义由哪个元素触发事件。除此之外,还有一种特殊情况就是在table使用el-popover也......
  • execjs - 编码报错问题解决方案
    当在Python中运行execjs时遇到编码问题,可能是由于JS代码中使用了非UTF-8编码。为了解决这个问题,您可以尝试以下两种方案最直接方法需要修改Subprocess中的Enconding为"Utf-8"将JS代码转换为UTF-8编码您可以在JS代码中将所有字符串转换为UTF-8编码。例如,您可以在JS代码文件......
  • luogu P4690 [Ynoi2016] 镜中的昆虫 题解
    P4690[Ynoi2016]镜中的昆虫题解题意维护一个长为 \(n\) 的序列 \(a_i\),有 \(m\) 次操作。将区间 \([l,r]\) 的值修改为 \(x\)。询问区间 \([l,r]\) 出现了多少种不同的数,也就是说同一个数出现多次只算一个。题解感觉这道题还是比较有意思的,像是一堆套路......