Codeforces Round #456 (Div. 2) 912E E. Prime Gift

  OvO http://codeforces.com/contest/912/problem/E

  首先把这16个数字拆成2个子集,各自生成所有大小1e18及以下的积

  对于最坏情况,即如下数据

1
2
16
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53

  把她肢解成

  2 3 5 7 11 13 和  17 19 23 29 31 37 41 43 47 53 两个集合

  这两个集合生成的1e18及以下的积的数量分别为 958460个505756个,并不大,而且两个集合中的积必定是两两不相等的(除了1)。

  记两个集合大小的和为 |S| 

  两个集合生成的积各自排一下序

  然后二分答案,对于每个答案 u,可以 O(|S|) 得到他是第几大。

  具体做法是枚举从到小枚举第一个集合的积 t1,然后计算一下第二个集合的积中有多少积和 t1 相乘小于等于 u

  由于是从大到小枚举的,所以 t1 必然递增,所以第二个集合的积中符合条件的积的数量也必然是递增的,所以只要扫一遍就行。

  然后要注意的是直接用 long long 来进行计算比较好,double的精度貌似不太够

  (参考自这里->http://codeforces.com/contest/912/submission/33938779

 

 

  

posted @   太阳星人FxxL  阅读(531)  评论(0编辑  收藏  举报
编辑推荐:
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 从 Windows Forms 到微服务的经验教训
· 李飞飞的50美金比肩DeepSeek把CEO忽悠瘸了,倒霉的却是程序员
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
点击右上角即可分享
微信分享提示