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个字符的方案数 此时转移变得异常麻烦 ...
随机推荐
- i++ & ++i不看字节码是真的难懂
package club.interview.base; /** * ++i 先"++"后赋值 * i++ 先赋值后"++" * i++ 局部变量表的值会改变, ...
- Buy a Ticket,题解
题目连接 题意: 没个位置有一个点权,每个边有一个边权,求对于每个点u的min(2*d(u,v)+val[v])(v可以等于u) 分析: 我们想这样一个问题,从u到v的边权*2再加一个点权就完了,我们 ...
- 使用@AutoConfigureBefore调整配置顺序竟没生效?
一个人的价值体现在能够帮助多少人.自己编码好,价值能得到很好的体现.若你做出来的东西能够帮助别人开发,大大减少开发的时间,那就功德无量. 作者:A哥(YourBatman) 公众号:BAT的乌托邦(I ...
- python面试题七: mysql数据库
---------------------------------------------------------------------------------------------------- ...
- tensorflow.python.framework.errors_impl.InvalidArgumentError: You must feed a value for placeholder tensor 'x_1' with dtype float and shape [?,227,227,3]
记一次超级蠢超级折磨我的bug. 报错内容: tensorflow.python.framework.errors_impl.InvalidArgumentError: You must feed a ...
- Centos7之LNMP环境编译安装
Centos7之LNMP环境编译安装 一.系统环境准备 注:安装时间过长,只做参考!!!1.系统信息 [root@localhost ~]# uname -r 3.10.0-957.el7.x86_6 ...
- bzoj3211花神游历各国&&bzoj3038上帝造题的七分钟2*
bzoj3211花神游历各国 题意: n个数的序列,m个操作,操作两种:区间开根(向下取整)和区间求和.n≤100000,m≤200000,序列中的数非负且≤109. 题解: 一个≤109的数开6次根 ...
- OSCP Learning Notes - Buffer Overflows(3)
Finding Bad Characters 1. Find the bad charaters in the following website: https://bulbsecurity.com/ ...
- GPO - Disabling Task Manager Access
Create a GPO to disable Task Manager Access to normal users. Add an exception to Domain Admins.
- 数据聚合与分组操作知识图谱-《利用Python进行数据分析》
所有内容整理自<利用Python进行数据分析>,使用MindMaster Pro 7.3制作,emmx格式,源文件已经上传Github,需要的同学转左上角自行下载或者右击保存图片. 其他章 ...