11 2023 档案
摘要:提炼 显然我们可以把每一段拆开来单独考虑 我们该段有 A^len 选择 右边肯定只要不是相同 我们的集合就+1 Alen*(Alen -1) 当然要是相同也要算1 A^len 中间当然就是随便选啥都可以 void solve() { int n,m,A;cin>>n>>m>>A; vector<in
阅读全文
摘要:提炼 首先观察范围发现是1e7 好像是dp 但是发现直接朴素的dp发现是有环的 跑了一发dijk带log 答案是肯定没过 我们可以想一下 如果我要是一个10 我肯定不会从11转移过来 因为我不如先去5 再2 如果我要是一个9 我可以从8+1转移过来 也可以从52-1转移过来 这样我们就消除了环 in
阅读全文
摘要:tilian 我们发现可以通过交换相邻两个的方式让字典序小的任意移动 我们目标串t 要是t[0]为 c 我们肯定是找到第一个合法的c的位置 每次去找合法并且最优的 那么哪些是不合法的呢 比如我 比c小的 a,b 位置还在第一个c前肯定就不能用了 我们用26个set维护这个过程即可 void solv
阅读全文
摘要:tilian 最开始看错了以为是 可以任意选择两人or选择一人胜出 但题意是 可以选择下一个擂主是谁 考虑dp的话 我们显然需要记录一个state以及当前擂主是谁 转移就是 dp[state][i]=max(dp[state][i],dp[state(1<<j)][j]*a[i][j]+dp[sta
阅读全文
摘要:// woshinidiea nizhemeexinwo ^ ^ #include <bits/stdc++.h> using namespace std; const int N = 1e6+10; //const int M = 998244353; const int mod = 1e9+7;
阅读全文
摘要:G. 背包 我们要是选一个集合出来 并且免除k个宝石的话 我们一定是选最贵的k个宝石免费 这样我们的做法就是对wi排序 然后前面的做背包 后面直接贪心选vi最大的k个 这样是一定包含了最优解的 当然你可以用二分bit 也可以直接维护另一个dp int n,tr1[200010],tr2[200010
阅读全文
摘要:tilian 不太会这种题 发现找到一个数就能确定整个序列 然后转而发现 前缀异或和 b1 ^ b2 = a1 b1 ^ b3 = a2 ... 我们发现要是n为偶数时能直接求出b1从而确定整个序列 而为奇数时我们无法确定b1 我们思考拆位之后 如果b1该位为0 算出真实的异或后的0 1 个数 b1
阅读全文