首页 > TAG信息列表 > PKUSC2018
P5369 [PKUSC2018]最大前缀和
[PKUSC2018]最大前缀和 Luogu P5369 题目描述 小 C 是一个算法竞赛爱好者,有一天小 C 遇到了一个非常难的问题:求一个序列的最大子段和。 但是小 C 并不会做这个题,于是小 C 决定把序列随机打乱,然后取序列的最大前缀和作为答案。 小 C 是一个非常有自知之明的人,他知道自己的算法完全[PKUSC2018]最大前缀和
考虑到最大前缀和的等价条件: 前缀的真后缀全>=0 前缀的补集的前缀小于0 考虑记\(S(u)\)为子表示的元素的权值和。 \(f(u)\)为满足第一个条件的方案数,\(g(u)\)为满足第二个条件的方案数。 注意到是真子集,所以我们要考虑\(s(u)\)小于\(0\)的情形。 所以记\(f(u,0),f(u,1)\),一个为【洛谷5370】[PKUSC2018] 主斗地(暴搜)
点此看题面 给出斗地主的若干种出牌牌型(详见原题面)。 现在有两个队友\(A,B\)。每轮\(A\)出一种牌型,\(B\)出一种同牌型的严格更大的牌,若二人能一起把牌打完则获胜。 从一副牌中分给每人\(17\)张,给定\(B\)的手牌,问\(A\)有多少种可能的手牌使得二人能获胜。(手牌中已除去\(3\)) 暴搜[PKUSC2018] 最大前缀和
\(\text{Problem}:\)[PKUSC2018] 最大前缀和 \(\text{Solution}:\) 不难发现,任意一个序列都可以表示为两个有着不同特殊性质序列的拼接,记为 \(A+B\)(\(A\) 和 \(B\) 可以为空),有: 序列 \(A\) 的性质:最大前缀和等于总和。 序列 \(B\) 的性质:所有前缀和小于 \(0\)。 设 \(f_{S}\) 表PKUWC/SC 做题笔记
去年不知道干了些啥,什么省选/营题都没做。 现在赶应该还来得及(?) 「PKUWC2018」Minimax 「PKUWC2018」Slay the Spire 「PKUWC2018」斗地主 「PKUWC2018」随机算法 「PKUWC2018」猎人杀 「PKUWC2018」随机游走 「PKUSC2018」真实排名 以上这些全都不会。 「PKUSC2018」最大前缀和 之「PKUSC2018」真实排名
分类讨论这个数(\(a_i\))翻不翻倍。 若翻倍,则\(\text{[$a_i$ ,2$a_i$ -1]}\)内的数必须翻倍,要不然会影响答案。 若不翻倍,则\(\text{[$\lceil \frac{a_i}{2} \rceil$, $a_i-1$]}\)内的数必须不翻倍,要不然也会影响答案。 剩下的计算可以组合数解决,注意特判\(a_i=0\)的时候要输出\(C_n^[PKUSC2018]真实排名——线段树+组合数
题目链接: [PKUSC2018]真实排名 对于每个数$val$分两种情况讨论: 1、当$val$不翻倍时,那么可以翻倍的是权值比$\frac{val-1}{2}$小的和大于等于$val$的。 2、当$val$翻倍时,显然权值在$[val,val*2-1]$的都要翻倍,剩下可以翻倍的是权值比$val$小的和大于等于$2*val$的。 用权值线段树维护「PKUSC2018」星际穿越
传送门 Solution 倍增 Code #include <bits/stdc++.h> #define reg register #define ll long long using namespace std; int read() { int x = 0, f = 1; char ch = getchar(); while (ch < '0' || ch > '9') { ifLOJ6436. 「PKUSC2018」神仙的游戏 [NTT]
传送门 思路 首先通过各种手玩/找规律/严谨证明,发现当\(n-i\)为border当且仅当对于任意\(k\in[0,i)\),模\(i\)余\(k\)的位置没有同时出现0和1。 换句话说,拿出任意一个1的位置\(x\),一个0的位置\(y\),那么对于\(|x-y|\)的所有约数\(i\),\(n-i\)均不合法。 考虑用NTT优化这个过程:记两个多loj#6436. 「PKUSC2018」神仙的游戏(生成函数)
题意 链接 Sol 生成函数题都好神仙啊qwq 我们考虑枚举一个长度\(len\)。有一个结论是如果我们按\(N - len\)的余数分类,若同一组内的全为\(0\)或全为\(1\)(?不算),那么存在一个长度为\(len\)的border。 有了这个结论后我们考虑这样一种做法:把序列看成两个串\(a, b\),若\(a_i = 0, b_j「PKUSC2018」神仙的游戏 - 题解
「PKUSC2018」神仙的游戏 题意:给出一个01?串,其中?可以代替成为0或1,令 $ F(i) $ 表示是否存在长度为 $ i $ 的border,求 $ (F(1) \times 1 \times 1) \bigoplus (F(2) \times 2 \times 2) \bigoplus (F(3) \times 3 \times 3) \dots \bigoplus (F(n) \times n \times n) $ 。 做法: 对