其他分享
首页 > 其他分享> > 【BIT2021程设】3.军训日记:安静!——难得的送分题

【BIT2021程设】3.军训日记:安静!——难得的送分题

作者:互联网

写在前面:

本系列博客仅作为本人十一假期过于无聊的产物,对小学期的程序设计作业进行一个总结式的回顾,如果将来有BIT的学弟学妹们在百度搜思路时翻到了这一条博客,也希望它能对你产生一点帮助(当然,依经验来看,每年的题目也会有些许的不同,所以不能保证每一题都覆盖到,还请见谅)。

不过本人由于学艺不精,代码定有许多不足之处,欢迎各位一同来探讨。

同时请未来浏览这条博客的学弟学妹们注意,对于我给出完整代码的这些题,仅作帮助大家理解思路所用(当然,因为懒,所以大部分题我都只给一个伪代码)。Anyway,请勿直接复制黏贴代码,小学期的作业也是要查重的,一旦被查到代码重复会严厉扣分,最好的方法是浏览一遍代码并且掌握相关的要领后自己手打一遍,同时也要做好总结和回顾的工作,这样才能高效地提升自己的代码水平。

加油!


Description

成绩10开启时间2021年08月24日 星期二 10:00
折扣0.8折扣时间2021年08月28日 星期六 23:59
允许迟交关闭时间2021年10月10日 星期日 23:59

 

小军的军训开始了,于是他开始写军训日记。正经人谁写日记啊?但小军可不是一般人。

教官告诉同学们,军训时不要互相讲话,要安静!但熟悉的同学之间总会讲话,这让教官很头疼。

教官的队伍里总共有n名同学,编号为1~n。两个同学之间是熟悉的当且仅当他们的编号不是互质的。

为了让同学们保持安静,他把同学们分成若干个小队,每个小队里没有任何两个同学是熟悉的。但小队多了又不好管理,于是教官向擅长算法的小军请教,至少需要把n名同学分成多少个小队?

数据范围与提示:n≤10^7。一个小队可以只有一个人,这种情况也是满足要求的。

输出格式:行末无空格,文末有回车。

测试用例 1以文本方式显示
  1. 5↵
以文本方式显示
  1. 2↵
1秒64M0

题意分析:

        整个小学期最友好的一道题,没有之一。

        “熟悉”等价于二者编号“不互质”,那么每个小队里没有任何两个人是“熟悉”的,就只需要每个小队所有人的编号都互质就行。

        很容易想到,一个小组里不能出现两个偶数,因此n名同学至少需要分成\frac{n}{2}个组(向下取整)。

        同时我们又可以想到,相邻的自然数必定互质,因此对于每个偶数k我们都可以用k+1与之配对(为什么不用k-1?自己先想想,一会告诉你),形成一个小组。可以发现,这样的分组情况也约为\frac{n}{2},那么我们只需要研究一下边界条件。

        这题的边界条件就一个1,我们知道,1与任何大于1的自然数都互质,所以1可以扔进任何一个小组里去,这也是上面选用k+1的原因。于是我们就可以得出最终的结果,对于n名同学,我们至少要分\frac{n}{2}(向下取整)个小组,同时我们还可以保证至少存在一个等于\frac{n}{2}(向下取整)的可行解,那么这个值就是最终的答案。

        别急!如果这时候提交上去你会发现还是有点红,咋办呢?那说明边界条件没研究干净,我们之前只研究了1作为边界条件和别人贴贴的情况,那么如果没有人和1贴贴呢?自然地补上这一条特殊情况,即只有一个1的时候,我们需要单独为他分一组。

        完成!这题应该没必要贴代码了吧。

标签:同学,10,分题,代码,小队,互质,程设,军训,BIT2021
来源: https://blog.csdn.net/m0_62573554/article/details/120602935