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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"educational codeforces round 103 (rated for div. 2)"是一个Codeforces平台上的教育性比赛,专为2级选手设计评级。以下是有关该比赛的回答。 "educational codeforces round 103 (rated for div. 2)"是一场Codeforces平台上的教育性比赛。Codeforces是一个为程序员提供竞赛和评级的在线平台。这场比赛是专为2级选手设计的,这意味着它适合那些在算法和数据结构方面已经积累了一定经验的选手参与。 与其他Codeforces比赛一样,这场比赛将由多个问题组成,选手需要根据给定的问题描述和测试用例,编写程序来解决这些问题。比赛的时限通常有两到三个小时,选手需要在规定的时间内提交他们的解答。他们的程序将在Codeforces的在线评测系统上运行,并根据程序的正确性和效率进行评分。 该比赛被称为"educational",意味着比赛的目的是教育性的,而不是针对专业的竞争性。这种教育性比赛为选手提供了一个学习和提高他们编程技能的机会。即使选手没有在比赛中获得很高的排名,他们也可以从其他选手的解决方案中学习,并通过参与讨论获得更多的知识。 参加"educational codeforces round 103 (rated for div. 2)"对于2级选手来说是很有意义的。他们可以通过解决难度适中的问题来测试和巩固他们的算法和编程技巧。另外,这种比赛对于提高解决问题能力,锻炼思维和提高团队合作能力也是非常有帮助的。 总的来说,"educational codeforces round 103 (rated for div. 2)"是一场为2级选手设计的教育性比赛,旨在提高他们的编程技能和算法能力。参与这样的比赛可以为选手提供学习和进步的机会,同时也促进了编程社区的交流与合作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值