当前位置: 首页 > news >正文

Educational Codeforces Round 144 (Rated for Div. 2) C - Maximum Set

传送门

题意:

对于一个集合,如果它的任意两个元素都能 有 其中一个能整除另一个,那么它是好的。问在区间[L,R] 中由这个区间某些数内构成的好的集合的最长长度是多少,以及且满足这个长度的好集合有多少个。(懒得想就借鉴了j宝的题面,感兴趣的也可以看看)。

思路
让我们首先考虑怎么获得他的最长的长度,对于集合中任意相邻的两个数中,相差的倍数一定为质数(合数可以由质数的乘机得到),而且一定是最小的质数2,那么可以从l出发,不断的×2知道小于r为止,此时这个数为p,得到的长度即为最长的长度。

然后从最长的长度sum来分析,里面包含的数可以简要概括为
(l,2×l, 4×l,8×l,…)那么如果我们想在其中改变数字以获得更多的满足条件的序列的话,那么我们只需要从两部分分析:序列中只有二和序列中只有一个三的情况(如果有大于3或者两个以上的三的情况那么都可以转变为更多的2的情况那么就不符合条件)。

1.序列中全部为2的情况那么能改变的就只有l,l通过不断的累加然后去找到一个最大的L满足L+p/l<=r,那么L<=r-p/l,
然后满足条件的序列的数量就为sum2=L-l+1,这就是全为2的情况。
2.序列中有一个3的情况,那么就相当于p里面少了个因子2,多了个因子三,然后继续去寻找最大的L即可。具体看代码.

ps:如果l*2>r满足的话,那么就说明l连一个因子2也加入不进去,那么长度就为 1,数量就为区间和,输出即可。

代码

void slove( )
{int l,r;cin>>l>>r;int p=l;int sum=1;if(l*2>r){cout<<1<<" "<<r-l+1<<endl;return ;}while(p*2<=r){p*=2,sum++;}p/=l;ll sum2=max(0,r/p-l+1);p/=2;p*=3;ll sum3=max(0,r/p-l+1);cout<<sum<<" "<< sum2+sum3*(sum-1)<<endl;
}
http://www.lryc.cn/news/32209.html

相关文章:

  • 学python的第四天---基础(2)
  • spring之refresh流程-Java八股面试(六)
  • 【C语言】刷题|链表|双指针|指针|多指针|数据结构
  • 糖化学类854262-01-4,Propargyl α-D-Mannopyranoside,炔丙基 α-D-吡喃甘露糖苷
  • 项目管理工具DHTMLX 在 G2 排名中再创新高
  • 28 位委员出席,龙蜥社区第 15 次运营委员会会议顺利召开
  • 自然语言处理-基于预训练模型的方法-chapter3基础工具集与常用数据集
  • 【SpringMVC】@RequestMapping
  • 【深度学习】BERT变体—SpanBERT
  • 根据身高体重计算某个人的BMI值--课后程序(Python程序开发案例教程-黑马程序员编著-第3章-课后作业)
  • 高并发编程JUC之进程与线程高并发编程JUC之进程与线程
  • css基础
  • Unity - 搬砖日志 - BRP 管线下的自定义阴影尺寸(脱离ProjectSettings/Quality/ShadowResolution设置)
  • 如何在SSMS中生成和保存估计或实际执行计划
  • mac 环境下安装MongoDB
  • RTOS中相对延时和绝对延时的区别
  • Solon2 项目整合 Nacos 配置中心
  • Linux 路由表说明
  • MIPI协议
  • 第十届CCF大数据与计算智能大赛总决赛暨颁奖典礼在苏州吴江顺利举办
  • PMP高分上岸人士的备考心得,分享考试中你还不知道的小秘密
  • ubuntu下编译libpq和libpqxx库
  • ESP-C2系列模组开发板简介
  • linux权限管理
  • 提高生活质量,增加学生对校园服务的需求,你知道有哪些?
  • Antlr4:使用grun命令,触发NoClassDefFoundError
  • 基于rootfs构建Docker镜像
  • 电脑文件软件搬家迁移十大工具
  • 【数据库】排名问题
  • 【redis学习篇】主从哨兵集群架构详解