XDUOJ题解合集(待填坑)

1000 A + B Problem : 没啥好说的 。

1001 又是苹果(模拟): 用数组记录一下索引,交换行列时交换索引即可。

1002 小W的塔防(dp): 记 f i , j f_{i,j} fi,j 表示某时间前有 i i i 个蓝塔, j j j 个绿塔的答案最大值,滚动时间 O ( n 3 ) O(n^3) O(n3) dp。

1003 亮亮的加法(模拟): 进制转换模板。

  • std::reverse( _begin, _end ) 可以翻转数组

1005 xry111的音频传输(数学): 答案是 ⌈ log ⁡ 2 n ⌉ \lceil \log_2{n}\rceil log2n,使用 long long 以防挂精度。

1006 亮亮破密码(期望 + 按位): 考虑每一位对答案贡献,按位异或记录前缀和,按位与、按位或记录前缀极长连续 1, 0。求期望直接除 n 2 n^2 n2 即可。使用 double 会被卡精度,要用 unsiged long long 统计答案。

1008 Josephus环(模拟): 用链表 O ( n 2 ) O(n^2) O(n2) 模拟删除过程即可。

1010 最优规则式(枚举): 将式子分成 b − a b-a ba d − c d-c dc 两端,分别计算前后缀的答案,枚举分隔点即可。

1012 重复序列(Border): 用 KMP 算法求出反串的 Border,根据循环串的性质,Border 大于串长一半时,其补集即为串的最小循环节,枚举前缀求即可。

1015 无聊的Light Light(贪心): 在保证长度最大时最大化高位。

1016 A + B : 没啥好说的 。

1017 Coderforce上的rating(模拟): 双关键字排序模板。

1019 自然数的秘密(二分答案 + 数论): n ! n! n! 的后缀 0 个数为等于 1 − n 1-n 1n 的因子 5 5 5 的个数,二分答案即可。

1020 ACMer去刷题吧(dp): 设 f i f_i fi 表示某时刻做对了 i i i 题的概率,滚动时间,答案是 1 − ∑ i = 0 k − 1 f i 1-\sum\limits_{i=0}^{k-1}f_i 1i=0k1fi。注意排除 -0.0000 的情况。

1021 A Simple Math Problem(数学): 答案是 n 4 × a 2 cot ⁡ ( π n ) \frac{n}{4} \times a^2\cot(\frac{\pi}{n}) 4n×a2cot(nπ)

1022 A Simple Math Problem 2(前缀和): 枚举每个数字 i i i f ( x ) f(x) f(x) 的贡献,发现差分后只有 ⌊ n i ⌋ \lfloor\frac{n}{i}\rfloor in 个位置有贡献,所以复杂度为 O ( n ln ⁡ n + q ) O(n\ln n + q) O(nlnn+q)。 若从 n 1 / k n^{1/k} n1/k 开始枚举,复杂度为 O ( q n 1 / k + k n ) O(qn^{1/k}+kn) O(qn1/k+kn),当 k k k 3 3 3 时在本题有最小。

1023 IP查询(二分): 直接把端点用 std::vector 存下,然后二分,注意本题卡读入。

1024 简单逆序对(前缀和): 把逆序对的树状数组换成前缀和即可。

1025 梦想庄园(拓扑排序 + dp): 物品依赖构成 DAG,直接拓扑排序转移 dp 即可。

1026 修理OJ(模拟): 模拟累乘,快速幂都不需要。

1027 & 1366 Feibonaqi(矩阵快速幂): 矩阵快速幂模板。

1028 数字工程(dp + 数论): 设 f i f_i fi 表示将 i i i 变成 1 1 1 的最小步数, f i f_i fi 可以类似埃拉托斯特尼筛 O ( n log ⁡ log ⁡ n ) O(n\log\log n) O(nloglogn) 求出,估计也可以用复杂度更低的方法求出。

1029 数一的逆袭(模拟): 直接 O ( n T ) O(nT) O(nT)double 模拟乘法求高位,当然用类似快速幂的倍增可以轻松做到 O ( T log ⁡ n ) O(T\log n) O(Tlogn)

1030 三数和(枚举): 枚举较小的两个数,判断是否有较大数满足条件。

1031 找规律(找规律 + 前缀和): 规律是 f i , j = i + j gcd ⁡ ( i + j , j ) f_{i,j}=\frac{i+j}{\gcd(i+j,j)} fi,j=gcd(i+j,j)i+j ,然后用二维前缀和维护一下和即可。

1032 找规律II(Lucas 定理): 卢卡斯定理模板。

1033 入围校赛(模拟): 模拟题意。

1034 猴子吃桃(枚举): 枚举第几个判断即可。

1035 数独(模拟): 模拟题意。

1036 分配宝藏(Bitset + dp): 经典 01 背包,可以用 std::bitset 优化转移,复杂度 O ( T n 2 v ω ) O(\frac{Tn^2v}{\omega}) O(ωTn2v)

1037 倍流畅序列(枚举): 倍流畅序列即翻转后按位异或全 1 序列,枚举对称中心即可。用 manacher 优化实现可以到 O ( n ) O(n) O(n)

1038 裁玻璃(状压dp): 发现问题可以转化为最大独立集,暴力状压复杂度为 O ( T m 4 n ) O(Tm4^n) O(Tm4n) 不可过,考虑枚举补集的子集,复杂度为 O ( T m 3 n ) O(Tm3^n) O(Tm3n),发现可行状态数类似斐波那契,复杂度改良为 O ( T m ( 3 + 5 2 ) n ) ≈ O ( T m 2.6 1 n ) O(Tm(\frac{3+\sqrt5}{2})^n) \approx O(Tm2.61^n) O(Tm(23+5 )n)O(Tm2.61n),若枚举子集用高维前缀和优化,则可以做到 O ( T n m 2 n ) O(Tnm2^n) O(Tnm2n)

1040 简单的游戏(模拟): 求出 A + B + C A+B+C A+B+C 然后求出 A , B , C A,B,C A,B,C 特判即可。

1041 Franky的游戏O(数论): n , m n,m n,m 均为偶数则答案为 2 2 2,否则为 1 1 1

1042 另一个游戏(贪心): 排序顺序操作即可。

1043 Boooooom(期望dp): dp 求出每天上不课概率 p p p,答案为 1 p − 1 \frac{1}{p}-1 p11,复杂度 O ( T n k ) O(Tnk) O(Tnk),可用多项式科技优化到 O ( T n log ⁡ k ) O(Tn\log k) O(Tnlogk)

1048 二分图模板测试(二分图匹配): 模板题。

1055 如此遍历(模拟): 递推出下一位置即可。

1056 寻找BOSS(卡塔兰数): 卡塔兰数模板题。

1057 卡尔的技能(Lucas 定理): 答案是 ( n + m − 1 m − 1 )   m o d   10007 {{n+m-1}\choose{m-1}}\bmod 10007 (m1n+m1)mod10007

1058 找子图(贪心): 考虑每个点的贡献,只加入正贡献的点即可。

1061 A+B of lw(数论): 模拟即可。

1094 2的幂次表示(分治): 将输出二进制分治,用递归模拟实现即可。

1097 焊板子的xry111(递推): f i = f i − 1 + f i − 2 + f i − 3 f_i=f_{i-1}+f_{i-2}+f_{i-3} fi=fi1+fi2+fi3,用 unsigned long long 即可。

1098 突击数论前的xry111(数论): 筛欧拉函数板子。

1099 A simple problem(2-points): 2-points 模板,枚举右端点,单调转移左端点即可。

1259 A + B problem(模拟): 输出 n − 1 n-1 n1 即可。

1301 数字计数(搜索): 直接 dfs 是 O ( n 0.302 ) O(n^{0.302}) O(n0.302) 的。

1308 &1448 求和(枚举): 枚举 A + B A + B A+B 存下,枚举 C + D C + D C+D 统计答案,

  • 1308 卡空间(二分): 把 A + B A+B A+Bstd::vector 存下,二分统计 C + D C+D C+D 答案。
  • 1448 卡时间(HashTable): 用哈希表存查,需要手写哈希表, std::unordered_map 会被卡空间。

1403 or2?Scum!(容斥): 基础容斥,没啥好说的。

1423 qko 的栈(栈): 套路题,用栈维护最小值即可。

1451 魔法废物再利用炸弹1(分类讨论 + 前缀和):

  1. 如果数组长度为 1,则无解。
  2. 如果数组长度大于 1,且所有数字异或和为 0,则从任意位置分为两段即可。
  3. 其它情况 : 若s所有数字异或和为 x,则我们可以将数组划分成三段 x^x^x,直接找到一个前缀异或为 x 后的 0 即可。

1452 假算法自动机(快速幂): 答案是 q 9 1 0 n \frac{q}{9}10^n 9q10n ,直接模拟即可。

1455 在奇妙的数学王国中遨游 :

  • (分块打表): 把答案前缀和以 1 0 6 10^6 106 为大小分块。
  • (枚举): 发现这种数字仅由 0123 组成,直接枚举复杂度是 O ( n 0.602 ) O(n^{0.602}) O(n0.602)

1456 程序设计竞赛(dp): 二维 01 背包模板。

1457 Creeper(模拟): 与经典题 独木桥一样的套路,直接无视碰撞计算每只 Creeper 离开时间即可。

1458 为什么你这么熟练啊(数论): 答案是 ⌊ n k ⌋ \lfloor\frac{n}{k}\rfloor kn

1461 欢欢爱数数(前缀和): 经典题,记录每个前缀模 k k k 的值即可。

1467 魔法废物再利用炸弹1(贪心): MtOI2019 原题,由于 a ⊕ b ≤ a + b a \oplus b \le a + b aba+b ,直接把所有数加起来即可。

1473 PRPRPR(整除分块): 要求 ∑ i = 1 n ⌊ n i ⌋ × ( n   m o d   i ) \sum\limits_{i=1}^{n}\lfloor\frac{n}{i}\rfloor\times(n \bmod i) i=1nin×(nmodi) 。按 ⌊ n i ⌋ \lfloor\frac{n}{i}\rfloor in 整除分块, ( n   m o d   i ) (n \bmod i) (nmodi) 是等差数列,用求和公式即可。注意中间值不要爆 long long

1476 祖玛 1(枚举): 枚举每个连续段作为插入点统计最大值。也许有类似 Manacher 算法的 O ( n ) O(n) O(n) 解法。

1478 美丽的建筑(树状数组 + dp): 直接正反两次最长上升子序列即可。

1481 运送货物(tarjan + 拓扑排序): 缩点模板,注意输出方式比较坑。

1482 简单的回文串计数(manacher + 差分): 先用 manacher 求出所有极长回文子串,然后发现每个极长回文子串对答案的而贡献是一个一次函数,所以用二阶差分记录答案。注意本题要求没有行末空格。

1483 音乐游戏(dp + 容斥): 先 O ( n 2 ) O(n^2) O(n2) dp 出不一定覆盖整个集合的方案数,然后用组合数容斥掉不满足的方案。

1484 双倍快乐(dfs + 枚举): 每个点改变状态的贡献是价值乘以到根的深度,枚举改变的边计算最大贡献即可。

1485 失败的在线考试(模拟): 按题意模拟,注意使用 scanf

1486 奇怪的梦境(模拟): 按位处理,减去进位的负贡献。

1487 没人比我更懂COVID-19(线性基): 很容易发现字母运算是异或,所以把每个字符串当成二进制数字,构造异或线性基,方案数为 2 ∣ S ∣ 2^{|S|} 2S ∣ S ∣ |S| S 表示线性基的秩,由于不能取空集,如果 ∣ S ∣ = n |S|=n S=n ,答案减一。

1500 你必将如闪电般归来(二分答案): 直接二分答案每次 O ( n ) O(n) O(n) 计算援军数量。

1501 世界第四(枚举): 按顺序枚举 mex 然后贡献是两端跨过小于 mex 组成的离散极长区间的区间的数量。

1502 老奶奶参加宴会(最短路): 先排序优化建图,然后跑一次单源最短路。

1504 奥尔加的编码(期望 + 分块打表): 由于线性性与对称性,大小为 n n n 的线性基,增加秩的概率为 2 n − 1 2 n \frac{2^n-1}{2^n} 2n2n1,期望 2 n 2 n − 1 \frac{2^n}{2^n-1} 2n12n 步,分块打表维护前缀和即可。

1505 签到题(模拟): 按题意模拟。

1506 去音乐会(博弈论 + bfs): 反向拓扑排序然后每个点 bfs 找 0,找不到则自己为 0,flukehn 大爷有更优秀的 O ( m ) O(m) O(m) 做法。

1517 qko的树据结构(弱化版)(换根dp): 先 dp 出子树到自己的距离和,然后从根递推出所有节点的答案。

1544 一个非常难的题(数论): 设 p ( x ) p(x) p(x) x x x 质因子的种类数,则答案为 ∑ i = 1 n k p ( i ) \sum \limits_{i=1}^nk^{p(i)} i=1nkp(i),随便筛筛是 O ( n log ⁡ log ⁡ n ) O(n\log\log n) O(nloglogn) 的。

1551 崩坏的栈(找规律):

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值