首页 > 其他分享 >CF926 Div.2

CF926 Div.2

时间:2024-02-18 16:55:05浏览次数:33  
标签:题解 线段 mask Sasha Div.2 CF926 我们 dp

C. Sasha and the Casino

赌场规则:如果下注 \(y(y > 0)\) 元,如果赢了则除了 \(y\) 元外,额外获得 \(y \times (k - 1)\) 元,否则则输掉 \(y\) 元;

并且你不能连续输超过 \(x\) 次

最初,你有 \(a\) 枚硬币,询问是否能够赢取任意数量的硬币

题解:思维

考虑这样一种策略:假设前面一直输,保证如果当前的这局赢了,盈利将超过亏损的钱,这种叫做倍投法,这样一旦赢了,我们重新从 \(1\) 开始下注

那么我们只需要暴力跑 \(x + 1\) 次即可

注意会爆 long long

D. Sasha and a Walk in the City

image-20240218162207739

题解:树形 DP

定义 \(dp[i][0/1/2]\) 代表以 \(i\) 为根的子树中,从任意叶子出发到 \(i\) 的路径中有 \(0/1/2\) 个危险节点

\[dp[i][0] = 1 \\ dp[i][1] = \prod_{j} (dp[j][0] + dp[j][1])\\ dp[i][2] = \sum_j (dp[j][1] + dp[j][2]) \]

E. Sasha and the Happy Tree Cutting

image-20240218163118943

题解:状压 DP + 虚树思想

关键路径数量 \(k \leq 20\) 提醒我们状压

我们对于每条边 \(i\) 求出有哪些关键路径经过 \(i\),定义其为 \(S_i\)

定义 \(dp[i][mask]\) 代表在前 \(i - 1\) 条边中涂色,使得有哪些关键路径被覆盖的状态为 \(mask\)

那么转移很简单:\(dp[i + 1][mask\ | \ S_i] = \min(dp[i + 1][mask\ | \ S_i], dp[i][mask] + 1)\)

\(dp[i + 1][mask] = min(dp[i + 1][mask], dp[i][mask])\)
但是现在复杂度为 \(O(n2^k)\),但是观察后我们发现实际上只有 \(O(k)\) 种 \(S_i\),因为我们对 \(2k\) 个关键点建虚树,虚树上的边数就是 \(S_i\) 不同的边数,即 \(O(k)\)

所以我们直接 \(O(nk)\) 处理 \(S_i\) ,然后排序后去重

然后 \(O(k2^k)\) 状压即可

注意滚动优化空间

F. Sasha and the Wedding Binary Search Tree

image-20240218164123589

题解:隔板法 + 二叉树的遍历

考虑到二叉树的中序遍历是有序的

那么我们就很多线段,并且我们也得到了每条线段中数的范围 \([l, r]\)

那么对于每条线段来说,就转化为:长度为 \(x\) 的线段,其中每个数范围在 \([l, r]\),要求使得线段中的数不递减的方案数

这是一个经典的组合数问题:我们考虑将线段中每个数看成小球,然后数的范围看成盒子,也就是 \(x\) 个相同的小球,放入 \(r - l + 1\) 个不同的盒子中,允许盒子为空的方案数,显然隔板法,即 \(C_{r - l + x}^{r - l}\)

但是 \(r - l\) 太大了,无法预处理,我们考虑换个形式 \(C_{r - l + x}^{r - l} = C_{r - l + x}^x\),我们考虑暴力计算,因为 \(\sum x = O(n)\) ,所以可以暴力

最后将每条线段的方案数的乘积作为答案即可

标签:题解,线段,mask,Sasha,Div.2,CF926,我们,dp
From: https://www.cnblogs.com/Zeoy-kkk/p/18019568

相关文章

  • Codeforces Round 922 (Div.2)
    题目链接点这里CF1918ABrickWallvoidsolve(){lln,m;cin>>n>>m;cout<<n*(m/2)<<endl;}CF1918BMinimizeInversions注意到,当其中一个排列有序时,总的逆序对数量最少()今天找个时间补上证明对于任意一对\(i,j\)位置,其可能的逆序对总......
  • Ozon Tech Challenge 2020 (Div.1 + Div.2, Rated, T-shirts + prizes!) B. Kuroni an
    Problem-1305B-Codeforces 啦啦啦,这题题目有点长,概括一下就是,希望将所有()匹配的括号去掉问你需要操作多少次 双指针,一个i一个j,从前往后记录匹配的括号如果发现:1.括号匹配2.i<jok,就放入ans (⊙o⊙)…,最后记得sort一遍ans,第一遍因为这个wa了一发 #include......
  • Educational Codeforces Round 134 (Div.2) D 题解
    题目链接D.MaximumAND题目大意给定两组序列\(a\)\(b\),长度为\(n\),现有一新序列\(c\),长度也为\(n\)。其中,\(c_i=a_i\oplusb_i\)。定义\(f(a,b)=c_1\&c_2\&……\&c_n\)。现在你可以随意编排\(b\)序列的顺序,求\(f(a,b)\)的最大值。思路以下位运算均是......
  • Codeforces 1786 / Codeforces Round #850 (Div.2)
    CodeforcesRound#850(Div.2)https://codeforces.com/contest/1786ProblemA1Non-alternatingDeck(easyversion)ProblemA2AlternatingDeck(hardversion)注意到最多进行\(O(\sqrtn)\)步,直接模拟即可。ProblemBCakeAssemblyLine题目保证了一定是\(n\)个蛋......
  • LGR-164-Div.2
    B考虑我们实际上仅仅在钦定\((u,v)\)不切断时需要通过\(v\)所在子树的异或和这个状态来更新\(u\)对应异或和的状态,此时状态内每一位都是独立的。所以直接拆位仍然能够转移,得到\(f_{i,j,0/1}\)表示节点\(i\)子树内第\(j\)位异或和确定情况下的答案。而在钦定\((u,......
  • CF1882 div.2 做题记录
    A题面扫一遍,令\(b_i\rightarrowb_{i-1}+1\),若\(b_i=a_i\),\(b_i\rightarrowb_i+1\)。点击查看代码#include<bits/stdc++.h>#defineullunsignedlonglong#definelllonglong#definepiipair<int,int>#definepdipair<double,int>#definepb......
  • cf1869 div.1,div.2做题记录
    赛时总结div.2A题面对于任意一个区间,我们可以通过一次操作将区间内的数变得全部相同。如果区间内的全部数都相同,那么我们再做一遍区间操作,当这个区间长度为偶数时,区间异或和为\(0\),会清空区间;当区间长度为奇数时,区间内的数不会发生改变。但我们可以将一个长度为奇数的区间拆成......
  • 【LGR-153-Div.2】梦熊联盟 8 月月赛 Ⅳ & Cfz Round 1 & 飞熊杯 #1
    【LGR-153-Div.2】梦熊联盟8月月赛Ⅳ&CfzRound1&飞熊杯#1\(T1\)「CfzRound1」DeadCells\(100pts\)正解:模拟(注意特判)llgcd(lla,llb){ returnb?gcd(b,a%b):a;}intmain(){ lla,b,k,d,i,ans=1; a=read();b=read();k=read(); d=a/gcd(a,b)*b; f......
  • Codeforces Ronud 892(Div.2)
    CodeforcesRonud892(Div.2)关于A题我有话说传送门题意给定一个长度为n的数组a,问能否将元素全部放入两个空数组b和c中,使得b和c数组同时满足非空,且c数组中没有任何数是b数组中的数的除数,如果可以输出一种存储方案,不可以就输出-1思路当天晚上一开始没有做出来,我一开始的思路是......
  • Codeforces Round 892 (Div.2)
    A.UnitedWeStand题解赛时想复杂了题目要求我们保证数组\(c\)中的数不是数组\(b\)中任意一个数的因子我们考虑将最小值置于数组\(b\)即可constintN=2e5+10,M=4e5+10;intn;inta[N];voidsolve(){cin>>n;intmi=INF;for(inti......