CF R 632 div2 1333F Kate and imperfection
赛后看了半天题 才把题目看懂 英语水平极差。
意思:定义一个集合S的权值为max{gcd(a,b)};且\(a\neq b\)
这个集合可以从1~n中选出一些数字 求出当集合大小为k时的最小价值。
无法二分 考虑构造。
考虑一种简单的情况 1~n的中gcd(a,b)最大为多少 可以发现我们只需要枚举i 看一下i/i的最小质因子的最大值即可。
所以是从质因子分解的层面考虑比较简单。
可以发现 当两个数字质因子集合有包含关系的时候 加入小的那个数到集合S之中一定不会比大的数加入集合S结果更差。(显然。
所以由上面的引理 可以直接构造一个集合大小为P的S集合 其中P为1~n的质数个数 且S集合为所有1~n的质数集合。
考虑接下来加入哪个数字更优 尽可能让gcd小 所以需要加入的数字为4 此时和其他数字比大小的是含有4的倍数的数字和其他的单个质因子。
不难发现此时6中含有的3是最小的。
可以发现此时考虑加入一个数字的时候 对答案的最大贡献 可以由引理得出 在加入i时 将i质因子分解 然后凡是i的质因数分解的子集此时一定已经加入了。
那么最大的贡献 就是子集最大的 即i/i的最小质因子。
那么我们得到了每个数的贡献排一下序即可。
但是 我在思考的时候 并没有从每个数字的贡献的角度入手而是一直在考虑加入哪个数字然后比大小。
一个方法:正难则反 这里加入数字比大小的时候每次都要考虑更新一些点的值 不妨反过来想加入一个点的时候的值是否有规律。
值得一提的是 所谓规律也是能找到的 譬如加入了i 那么凡是含有i的倍数的数字都要将值更新一下。
然后顺着这个思路 可以暴力更新 这样复杂度是nln的但是每次需要找最大值里面写一个线段树就可以达到nlog^2.
但是 根据我们的引理 就可以很简单的推出 每个数字都会被一个数字更新成最大值 可以发现这个最大值可以被找到 即i/最小质因子。
const int MAXN=500010;
int n,top;
int v[MAXN],p[MAXN],w[MAXN];
inline void prepare()
{
w[1]=1;
rep(2,n,i)
{
if(!v[i])p[++top]=v[i]=i,w[i]=1;
rep(1,top,j)
{
if(n/i<p[j])break;
int ww=i*p[j];
v[ww]=p[j];
w[ww]=i;
if(p[j]==v[i])break;
}
}
}
int main()
{
freopen("1.in","r",stdin);
get(n);prepare();
sort(w+1,w+1+n);
rep(2,n,i)printf("%d ",w[i]);
return 0;
}
CF R 632 div2 1333F Kate and imperfection的更多相关文章
- CF R 632 div2 1333D Challenges in school №41
LINK:Challenges in school №41 考试的时候读错题了+代码UB了 所以wa到自闭 然后放弃治疗. 赛后发现UB的原因是 scanf读int类型的时候 宏定义里面是lld的类型 ...
- CF R 639 div2 F Review 贪心 二分
LINK:Résumé Review 这道题让我眼前一亮没想到二分这么绝. 由于每个\(b_i\)都是局部的 全局只有一个限制\(\sum_{i=1}^nb_i=k\) 所以dp没有什么用 我们只需要 ...
- CF R 635 div2 1337D Xenia and Colorful Gems 贪心 二分 双指针
LINK:Xenia and Colorful Gems 考试的时候没想到一个很好的做法. 赛后也有一个想法. 可以考虑答案的样子 x,y,z 可以发现 一共有 x<=y<=z,z< ...
- E CF R 85 div2 1334E. Divisor Paths
LINK:Divisor Paths 考试的时候已经想到结论了 可是质因数分解想法错了 导致自闭. 一张图 一共有D个节点 每个节点x会向y连边 当且仅当y|x,x/y是一个质数. 设f(d)表示d的 ...
- CF R 630 div2 1332 F Independent Set
LINK:Independent Set 题目定义了 独立集和边诱导子图.然而和题目没有多少关系. 给出一棵树 求\(\sum_{E'\neq \varnothing,E'\subset E}w(G( ...
- CF Round #580(div2)题解报告
CF Round #580(div2)题解报告 T1 T2 水题,不管 T3 构造题,证明大约感性理解一下 我们想既然存在解 \(|a[n + i] - a[i]| = 1\) 这是必须要满足的 既然 ...
- CF round #622 (div2)
CF Round 622 div2 A.简单模拟 B.数学 题意: 某人A参加一个比赛,共n人参加,有两轮,给定这两轮的名次x,y,总排名记为两轮排名和x+y,此值越小名次越前,并且对于与A同分者而言 ...
- CF-1333F Kate and imperfection
F. Kate and imperfection 假设一个一个的往集合里面放元素,显然在放某个元素之前,我们不想让它的倍数已经在集合里面.因为在这之前,我们不如先把这个数放进去,再把它的倍数放进去更优 ...
- CF R 635 div1 C Kaavi and Magic Spell 区间dp
LINK:Kaavi and Magic Spell 一打CF才知道自己原来这么菜 这题完全没想到. 可以发现 如果dp f[i][j]表示前i个字符匹配T的前j个字符的方案数 此时转移变得异常麻烦 ...
随机推荐
- 洛谷 P1433 吃奶酪 状压DP
题目描述 分析 比较简单的状压DP 我们设\(f[i][j]\)为当前的状态为\(i\)且当前所在的位置为\(j\)时走过的最小距离 因为老鼠的坐标为\((0,0)\),所以我们要预处理出\(f[1& ...
- unity vscode 断点问题
困扰了很久的vscode老莫名其妙的断到网络通信那里. 后来发现是因为起来了一个线程并且调用的unity API 导致. unity 线程中是禁止调用unity API 的. 删掉用 DateTime ...
- Js 利用正则 在字符串中提取数字、替换非数字字符为指定字符串
var s ="总金额4500元"; var num= s.replace(/[^-]/ig,""); alert(num);// 上述示例会把数字匹配到直接转 ...
- 【DevCloud · 敏捷智库】两种你必须了解的常见敏捷估算方法
背景 在某开发团队辅导的回顾会议上,团队成员对于优化估计具体方法上达成了一致意见.询问是否有什么具体的估计方法来做估算. 问题分析 回顾意见上大家对本次Sprint的效果做回顾,其中80%的成员对于本 ...
- Django之模型层第一篇:单表操作
Django之模型层第一篇:单表操作 一 ORM简介 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增.删.改.查),而一旦谈到数据的管理操作,就需要用到数 ...
- 外部应用复制 表格 到word中 设置表格自适应
word 批量设置表格宽度自适应 描述 : 我们经常从 外部 如 excel,html 等其他文件 中复制的表格到word 文档 经常会出现在 word 中显示不全的问题 主要是源格式的表格 宽度比 ...
- CTF_show平台 web题解 part2
web10 WITH ROLLUP 绕过 点击取消键弹出源码下载: 源码如下: <?php $flag=""; function replaceSpecialChar($st ...
- JVM 专题八:运行时数据区(三)虚拟机栈
2.虚拟机栈 1. 概述 1.1 虚拟机栈出现背景 由于跨平台性的设计,java的指令都是根据栈来设计的.不同平台CPU架构不同,所以不能设计为基于寄存器的. 优点是跨平台,指令集小,编译器容易实现, ...
- Mysql基础(七):数据库总结
目录 MySQL数据库06 /数据库总结 1. 数据库/DBMS 2. 数据库分类 3. 修改密码 4. 库操作 5. 表操作 6. 存储引擎 7. 事务 8. 约束 9. 数据类型 10. 单表语句 ...
- C#版本说明
语言版本 发布时间 .NET Framework要求 Visual Studio版本 C# 1.0 2002.1 .NET Framework 1.0 Visual Studio .NET 2002 ...