PKUSC2018题解

真实排名

分别考虑第\(i\)个人翻倍和不翻倍的情况,组合数算一下即可,务必注意实现细节。

代码

最大前缀和

设\(sum_s\)表示集合\(\sum_{i\in s} a_i\),\(f_s\)表示最大前缀和等于\(sum_s\)的方案数,\(g_s\)表示选出集合\(s\)排成的最大前缀和均不大于\(0\)的方案数。
因为最终的答案肯定是最大前缀和所在的位置\(pos\)后面一定不存在有一段前缀和大于\(0\),否则向后更新还可以更优。
令全集为\(U\)那么
\[
Ans=\sum_{S\subseteq U} sum_S\times f_S\times g_{\complement_U S}
\]
现在主要是考虑如何求\(f,g\):

考虑主动转移,由后往前插入数字\(i\),那么\(f_S\rightarrow f_{S\cup \{i\}},sum_S>0\),因为这样的话从i向后选一定会更优;\(g\)的转移比较简单,就是\(g_S\rightarrow g_{S\cup \{i\}},sum_{S\cup\{i\}}\leq 0\)。

代码

主斗地

待填

星际穿越

令\(L(i)=\min_{j=i}^nl_j\),首先你从一个点\(i\)起跳你的往左的可达区间为\([l_i,i)\),然后第二步跳就可以跳到\([L(l_i),l_i)\),然后一直跳就是这么个情况:\([L(L(...L(l_i))),上一次落脚点)\)。

直接预处理一个跳到另外一个是\(O(n^2)\)的有\(70pts\),考虑怎么优化。

令倍增数组\(f_{i,j}\)表示从\(j\)左跳\(2^i\)下跳到哪,\(g_{i,j}\)表示\([f_{i,j},j]\)中所需贡献是多少。

那么你每次倍增求出\(x\rightarrow l\)的代价然后减去\(x\rightarrow r+1\)的代价即可,倍增的具体过程见代码。

代码

神仙的游戏

考虑长度为\(len\)的\(border\)的性质,就是说对于长度为\(n\)的字符串\(s\),\(s[1...len]=s[n-len+1,n]\)(这不是定义吗)
也就是说位置\(i\equiv j\;(\bmod\;n-len)\)的话,\(i,j\)的数字相等。

那么对于一个不同的\(0,1\)假设他们的位置之差为\(x\),假设不成立,则有\(x \equiv 0\;(\bmod\;n-len\)),即对于\(y|x\),长度\(n-y\)的\(border\)不满足条件。

然后\(O(n^2)\)地做这个东西是\(67pts\),想办法优化。

构造多项式
\[
A(x)=\sum_{i=0}^{n-1}[s_i=0]x^i\\
B(x)=\sum_{i=0}^{n-1}[s_i=1]x^i
\]
因为我们要求确定差值,而多项式乘法能做的事是求出确定和,我们可以将\(A,B\)任意一个多项式\(reverse\)就可以做到了,最后枚举长度\(len\)的倍数,如果\(C=A\times B\)没有地方的\(C[n-1-k\cdot len]\geq 1\)以及\([n-1+k\cdot len]\geq 1\),那么长度\(len\)就满足条件,这一部分复杂度是调和级数的。

总复杂度\(O(n\log n+n\ln n)\)。

代码

PKUSC

待填

PKUSC2018题解的更多相关文章

  1. loj 6433 「PKUSC2018」最大前缀和 题解【DP】【枚举】【二进制】【排列组合】

    这是个什么集合DP啊- 想过枚举断点但是不会处理接下来的问题了- 我好菜啊 题目描述 小 C 是一个算法竞赛爱好者,有一天小 C 遇到了一个非常难的问题:求一个序列的最大子段和. 但是小 C 并不会做 ...

  2. 题解 洛谷 P5465 【[PKUSC2018]星际穿越】

    首先考虑题目的性质,发现点向区间连的边为双向边,所以也就可以从一个点向右跳到区间包含该点的点,如图所示: 但事实上向后跳其实是不优的,可以有更好的方法来节省花费: 因此我们发现一个点跳到其前一个区间的 ...

  3. LOJ #6436. 「PKUSC2018」神仙的游戏(字符串+NTT)

    题面 LOJ #6436. 「PKUSC2018」神仙的游戏 题解 参考 yyb 的口中的长郡最强选手 租酥雨大佬的博客 ... 一开始以为 通配符匹配 就是类似于 BZOJ 4259: 残缺的字符串 ...

  4. LOJ #6435. 「PKUSC2018」星际穿越(倍增)

    题面 LOJ#6435. 「PKUSC2018」星际穿越 题解 参考了 这位大佬的博客 这道题好恶心啊qwq~~ 首先一定要认真阅读题目 !! 注意 \(l_i<r_i<x_i\) 这个条 ...

  5. LOJ #6432. 「PKUSC2018」真实排名(组合数)

    题面 LOJ #6432. 「PKUSC2018」真实排名 注意排名的定义 , 分数不小于他的选手数量 !!! 题解 有点坑的细节题 ... 思路很简单 , 把每个数分两种情况讨论一下了 . 假设它为 ...

  6. 【LOJ6433】【PKUSC2018】最大前缀和

    [LOJ6433][PKUSC2018]最大前缀和 题面 题目描述 小 C 是一个算法竞赛爱好者,有一天小 C 遇到了一个非常难的问题:求一个序列的最大子段和. 但是小 C 并不会做这个题,于是小 C ...

  7. 【LOJ4632】[PKUSC2018]真实排名

    [LOJ4632][PKUSC2018]真实排名 题面 终于有题面啦!!! 题目描述 小 C 是某知名比赛的组织者,该比赛一共有 \(n\) 名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排 ...

  8. 【LOJ6436】【PKUSC2018】神仙的游戏(NTT)

    [LOJ6436][PKUSC2018]神仙的游戏(NTT) 题面 LOJ 题解 看到\(zsy\)从\(PKUSC\)回来就秒掉了这种神仙题 吓得我也赶快看了看\(PKUSC\)都有些什么神仙题 然 ...

  9. [LOJ#6437][BZOJ5373]「PKUSC2018」PKUSC

    [LOJ#6437][BZOJ5373]「PKUSC2018」PKUSC 试题描述 九条可怜是一个爱玩游戏的女孩子. 最近她在玩一个无双割草类的游戏,平面上有 \(n\) 个敌人,每一个敌人的坐标为 ...

随机推荐

  1. macbook pro更换键盘的排线

    以下是拆机图解 很简单的 有点动手能力的都可以更换 另外附加淘宝上的链接 https://item.taobao.com/item.htm?spm=a1z09.2.0.0.68a12e8dYAiQIx ...

  2. pixijs shader 扫光加强版

    pixijs shader 扫光加强版 const app = new PIXI.Application({ transparent: true }); document.body.appendChi ...

  3. PHP匿名函数的写法

    传统写法<pre>function timer () { echo "hello world";}Swoole\Timer::tick(2000, 'timer');& ...

  4. Windows重要的win键

    win+↓ 当前窗口操作,多按几下就缩没了(同理,其他箭头也一样) win+e 打开此电脑 win+v 展开剪切板 win+k 访问蓝牙 win+a win10的通知 win+d (切到桌面,再用能切 ...

  5. logical函数

    logical函数(逻辑函数) logical(x):x ~=0时,logical(x)=1:x = 0时,logical(x)=0

  6. asp.net实现页面跳转后不可以返回

    window.history.go(0); Response.Write("<script> window.history.go(0);alert('恭喜user注册成功!!!\ ...

  7. C 函数声明、函数参数

    参考连接:https://www.runoob.com/cprogramming/c-functions.html 局部变量与全局变量在内存中的储存方式 全局变量保存在内存中的全局储存区中,占用静态的 ...

  8. Flask-Cookies和Session

    目录 cookies session save_session的参数 session源码执行流程 请求第一次过来时 请求第二次进来 SecureCookieSession 签名算法 session的生 ...

  9. npm 查看全局安装模块

    方法一: npm list -g --depth 0 方法二: 输入npm root -g  得到全局node_modules的地址 在任意文件夹输入此地址,便可查看所安模块 https://blog ...

  10. i春秋暑期训练营丨渗透测试工程师开课啦

    每个人的夏天 都有专属的解锁方式 或来一次难忘的旅行 或躺在家里吹着空调吃西瓜 又或者是和小伙伴参加暑期训练营 i春秋暑期渗透测试工程师 报名通道已全部开启 为了保证课程质量,采取小班教学,每班仅限3 ...