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. 动手学深度学习10- pytorch多层感知机从零实现

    多层感知机 定义模型的参数 定义激活函数 定义模型 定义损失函数 训练模型 小结 多层感知机 import torch import numpy as np import sys sys.path.a ...

  2. Python连载33-共享变量加锁、释放

    一.共享变量 共享变量:当多个线程访问同一个变量的时候.会产生共享变量的问题. 例子: import threading sum = 0 loopSum = 1000000 def myAdd(): ...

  3. jdk-8u151-nb-8_2-windows-x64软件安装教程及环境配置

    1.双击jdk-8u151-windows-x64.exe文件 2.进入安装向导 3.配置环境变量 (1)计算机→属性→高级系统设置→高级→环境变量 (2)系统变量→新建 JAVA_HOME 变量 . ...

  4. 【UOJ#61】【UR #5】怎样更有力气(最小生成树)

    [UOJ#61][UR #5]怎样更有力气(最小生成树) 题面 UOJ 题解 最最最暴力的想法是把所有边给处理出来然后跑\(MST\). 考虑边权的情况,显然离线考虑,把么一天按照\(w_i\)进行排 ...

  5. java架构之路-(nginx使用详解)nginx的反向代理和优化配置

    书接上回说,nginx我们学会了简单的配置.那么我今天来聊一下,我们ngxin的一些优化配置(我不是很懂,不敢谈高级配置).我先来看一下nginx的好处和正向代理. nginx的好处 1.可以高并发连 ...

  6. Abap内表

    什么是内表:内表是内存中建立的一个临时表,你可以在程序运行时对表中的数据进行,插入,修改,删除等操作,程序跑完了,就会被释放. 定义类型:通过types开头定义 TYPES: BEGIN OF lin ...

  7. 练手WPF(一)——模拟时钟与数字时钟的制作(下)

    继续数字时钟.上一篇写好了数字笔划专用的DigitLine类.现在是时候使用它了.下面对一些主要代码进行说明. 打开MainWindow.xaml.cs文件: (1)添加字段变量 // 数字时钟字段定 ...

  8. QT4.8.7和VS2010环境搭建及使用

    (一)环境搭建 首先下载QT4.8.7的安装包.QT Addin 1.11插件和VS2010安装包.第一步:安装好VS2010第二步:安装QT4.8.7(qt-opensource-windows-x ...

  9. AJAX小示例

    一. 基本内容 定义:AJAX(Asynchronous Javascript And XML)翻译成中文就是"异步的Javascript和XML",即使用Javascript语言 ...

  10. access truncate

    access int access(const char *pathname, int mode); 确定文件或文件夹的访问权限 //unistd.h #define R_OK 4 /* Test f ...