12 2023 档案

摘要:https://codeforces.com/contest/1896/problem/D 首先我们要发现一个性质就是 要是我们能凑出为S的 那一定能凑出S-2的 询问的时候和总的同奇偶就可以随便缩一下 要是不同奇偶我们就得找到最左最右的1来改变奇偶 用set维护1的位置即可 void solve( 阅读全文
posted @ 2023-12-20 02:11 ycllz 阅读(13) 评论(0) 推荐(0) 编辑
摘要:感觉这场的题都挺傻逼的 写一下题解 A 17 71就是两位数的素数 void solve(){ string s;cin>>s; for(auto c:s){ if(c=='1'||c=='7')cout<<c; }cout<<endl; } B 注意到第一位必然是0 最后一位必然是1 那我们就找一 阅读全文
posted @ 2023-12-16 15:22 ycllz 阅读(15) 评论(0) 推荐(0) 编辑
摘要:显然O(n)划分之后可以用一个三维dp写 可以用bitset优化 也可以 化简为二维 dp i j 表示第i位 能搞到 a的j位 并且 搞到b位的 最大值 int dp[410][410]; bool check(string &s,string &pre,string &suf) { memset 阅读全文
posted @ 2023-12-14 23:55 ycllz 阅读(12) 评论(0) 推荐(0) 编辑
摘要:考虑二元环 要是二元环相同 那么显然怎么构造都可以了 否则 我们考虑 没有二元环相同 要是m是奇数 我们随便跑跑就行 要是m是偶数 情况呢 我们需要构造一种情况 我们肯定用的点数越少越好 我们考虑三个点 要是两个二元环都是 a 出 或者 b 出的 就可以构造出来了 void solve(){ int 阅读全文
posted @ 2023-12-14 18:26 ycllz 阅读(3) 评论(0) 推荐(0) 编辑
摘要:以前写挂了 今天又拿出来写 手玩一下样例发现 我们从高位贪是肯定的 尽可能让该位置和原串一样 然后我们可以枚举该位改成什么字母 然后计算后面的放是否合法 写的很屎 其实就是复制粘贴了一坨 我们先找到 最远的位置可以修改 再修改为最小的即可 void solve(){ int n,k;cin>>n>> 阅读全文
posted @ 2023-12-14 15:18 ycllz 阅读(4) 评论(0) 推荐(0) 编辑
摘要:想了好久的策略发现都wa了 后面仔细思考了一下 我们肯定只选一种bi 那我们不妨枚举bi 然后比bi大的ai我们都选 我的写法有点问题 要加特判 其实是可以二分找到大于bi的点 更好写一些 明天吧这个题 和 上一个拓扑的题写一下简单写法 void solve(){ int n,m;cin>>m>>n 阅读全文
posted @ 2023-12-14 02:28 ycllz 阅读(2) 评论(0) 推荐(0) 编辑
摘要:我们发现好像和拓扑序有关 我们做拓扑序的时候 要是一个点没有 有向边出去 或者进来 我们好像可以随意钦定该点其他无向边 要是有 有向边入 和 有向边出 那么肯定寄 有一种就直接钦定为该点其他有向边的方向就可以了 其实 具体实现的时候我们可以直接有向边拓扑序 之后 无向边钦定 由拓扑序小的指向拓扑序大 阅读全文
posted @ 2023-12-13 23:27 ycllz 阅读(3) 评论(0) 推荐(0) 编辑
摘要:看到k等于20 我们大胆猜测这个选择的个数不会超过20条 枚举我们要选i条 然后计算权值的话 要是大于等于i的k都是算1的 否则就算 k/i 我们按照这个给每一个计算一下权值 选最大的i条即可 void solve(){ int n;cin>>n; vector<int>t[21],cz[21],v 阅读全文
posted @ 2023-12-13 16:43 ycllz 阅读(3) 评论(0) 推荐(0) 编辑
摘要:最开始以为有环 发现没环之后 发现是有负数的 把第三个样例画出来 发现疑似是拓扑序之后要是该点为正肯定 放前面 否则放后面 但是发现好像 有些点为负数的可以通过+变回正的也要放前面 那我们贪心跑一遍即可 void solve(){ int n;cin>>n; vector<int>a(n+1),b( 阅读全文
posted @ 2023-12-12 23:04 ycllz 阅读(18) 评论(0) 推荐(0) 编辑
摘要:我们知道要是任意位置交换就是环长-1 那我们肯定要让环尽量少即可 那我们的环最多就是 出现最多的那个数字的 次数 构造策略 就是把其他不同的数字 都提出来 然后往后挪一下就可以构造出环了 void solve(){ int n;cin>>n; vector<int>a(n+1),v[n+1]; fo 阅读全文
posted @ 2023-12-09 17:16 ycllz 阅读(2) 评论(0) 推荐(0) 编辑
摘要:计数 我们可以发现直径上的才会和其他点构成直角 我们处理出有多少条直径 随即思考如何计数 定义 d 为 直径对数 n,m 点数 颜色数 sy 除直径外剩余点 要是直径上的不同 : m(m-1) ^ d 选出不同颜色对个数 * 其他点任意颜色 m^sy 要是直径上颜色相同 那么这个颜色只能是这两个点 阅读全文
posted @ 2023-12-08 21:26 ycllz 阅读(5) 评论(0) 推荐(0) 编辑
摘要:玩一下样例就能知道 这个是和 每个seg的最大间隔相关 为了好写我们可以直接写成元素间隔 这样我们用两个multiset维护元素间隔以及元素即可 注意删除的时候我们只删一个值 需要删指针 还有考虑长度为1的情况 multiset<int>st,st1; void Erase(int x){ auto 阅读全文
posted @ 2023-12-07 21:03 ycllz 阅读(3) 评论(0) 推荐(0) 编辑
摘要:调到了天亮。。。。 很一眼 就是线段树区间加 然后回文串只有两种类型 aa aba 所以我们维护的信息就是 l r 最左边两个字母ls[2] 最右边两个字母rs[2] 是否发现回文串st 最重要的来了 我们不能初始化次左 次右 为当前字母 我们应该初始化为-1 然后注意pushdown不要影响他们 阅读全文
posted @ 2023-12-07 04:43 ycllz 阅读(8) 评论(0) 推荐(0) 编辑
摘要:111 发现要是所有的l r求和 L R 的差距>n 我们总可以找到一个x不在n个不同的aij里 然后我们知道L R 的差距不大于1e5 我们枚举这个最终的个数为now 我们钦定选满所有的非now的元素 看是否差一些元素达到now 当然维护过程中我们要注意l[i] r[i]的限制 但是我们枚举now 阅读全文
posted @ 2023-12-07 01:22 ycllz 阅读(4) 评论(0) 推荐(0) 编辑
摘要:111 排序之后 我们可以枚举最大值 因为之前的任意两个gcd都不能超过这个最大值 但是 我们每次往下枚举 就要加入这个最大值 我们可以枚举他的因子 要是之前出现过 那么这个因子的贡献显然就可以求出来 但是这样有可能 多算了贡献比如 20可能算到 20 也算了 2 我们设sum_i 表示gcd为i的 阅读全文
posted @ 2023-12-06 16:29 ycllz 阅读(5) 评论(0) 推荐(0) 编辑
该文被密码保护。
posted @ 2023-12-05 19:23 ycllz 阅读(1) 评论(0) 推荐(0) 编辑
摘要:111 感觉写的好多都是2000分 dp + 路径 这个dp 很明显发现只和 行相关 然后我们发现每行最多俩个 那么肯定就是ababab这种交叉 dp i a b 就是我们第i行选了 a b 交叉的min 转移也是26*26 预处理 cost i a b 作为每行的转移代价即可 最后要注意就是m== 阅读全文
posted @ 2023-12-04 21:25 ycllz 阅读(6) 评论(0) 推荐(0) 编辑
摘要:111 发现d(x)只有0-9的值 我们可以把按d(x)来分类 发现要只计算 我们就可以枚举d(C)d(a)d(b)贡献就是 这三个任选 要是有前面限制呢 我打了一下表 发现要是AB=C 那么肯定满足后面 这样我们就只用枚举C然后算他有多少对因子即可 然后发现C是1-n 连续的 可以直接枚举因子A 阅读全文
posted @ 2023-12-04 19:55 ycllz 阅读(5) 评论(0) 推荐(0) 编辑
摘要:提炼 首先看到24 那无疑是状态压缩 这样我们dp[1<<24]就是 收集到state状态的min 关于转移 我们需要枚举当前状态下的两个0位 复杂度显然是2424(1<<24)级别的 虽然有剪枝 但是 我们仔细一想 我们的答案 不需要 任何的顺序 证明我们可以随便拿出最优的一组即可 我们找到第一个 阅读全文
posted @ 2023-12-04 16:44 ycllz 阅读(7) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示