首页 > 小苯的前缀gcd构造
头像 小男娘
发表于 2026-05-08 00:31:31
你们都是可爱的小萝莉和小男娘喵~显然发现只要前面被后面整除, 喵,并且如果答案存在一定可以构造这样的序列喵~ 表示前 i 个最后一个数为 j 总和为 k 是否可能,直接转移就可以了喵~下标可以枚举因子优化喵~发现转移是平移,于是可以用 bitset 优化喵~最终时间复杂度 喵~ #include 展开全文
头像 AliLexiWalker
发表于 2026-05-08 00:21:37
一边往数组里放数,一边让前缀 gcd 只会往“更小的约数”走,再用 DP 记录当前前缀 gcd 和已经凑出来的权值,最后看看能不能刚好凑到 x。 void solve(){ int n,m,x;cin>>n>>m>>x; if(x<n||x& 展开全文
头像 YeYiTong_Eason
发表于 2026-05-08 11:41:01
看到没有人想过dfs的解答,来一个相对比较好理解的dfs版本。注意到n和m数据范围很小(50及以内),组数不超过10组,剪枝一下可以卡过时间。注意到f(i)这个序列是不增序列,并且有 f(i+1) | f(i). 我们的目标是通过dfs搜索每一个位置的数。怎么用dfs搜索构造序列呢?首先先预处理50 展开全文
头像 此在Dasein
发表于 2026-05-08 06:05:14
1. 问题分析 该问题的核心在于构造一个数组 ,使其前缀 GCD 序列 的和等于目标值 。通过对 GCD 及其前缀性质的深入分析,我们可以得出以下关键约束: 单调不增性:由 的性质可知,。这意味着 必须是 的约数。因此,序列 必须是一个非递增的正整数序列。 整除约束:对于任意 , 必须满 展开全文
头像 腌萝卜干
发表于 2026-05-08 14:49:54
以下是详细注释帮助理解版 #include <bits/stdc++.h> #define x first #define y second #define all(x) x.begin(), x.end() #define vec1(T, name, n, val) vector&l 展开全文

等你来战

查看全部