ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

寒假集训学习记录 1-18

2021-01-18 23:35:40  阅读:205  来源: 互联网

标签:盒子 晚上 18 sum 然后 寒假 倍数 细菌 集训


  嗯,今天的收获怎么说呢,关于我们这学期期末的项目有了新进展,很开心啊。

  然后进入主题,今天可能会有些草率,水群去了,难受,忘了今天的博客,废物本废了。所以今天的内容是位运算(巧的是昨天的快速幂刚好遇到,然后今天又写到了一道位运算的题),http://codeforces.com/problemset/problem/579/A,附上题目,感兴趣可以做做,感受一下AC的快乐。然后这个题的大概意思就是这样:你想要在盒子里饲养一些细菌,首先盒子是空的。然后你每天早上会放一些细菌到盒子里,每到了晚上,盒子里的每个细菌就会分裂成两个。有些时候你知道了盒子里确切的细菌数量x。要问这些天你最少得往盒子里放多少个细菌。

  然后我一看这道题,最初的想法是难道是奇数就输出2,是偶数就直接输出1,本来觉得奇怪,怎么还能做到如此简单的题,然后当然本着抖机灵的心态,我还真的交上去试了试,事实证明我就是个傻子,但是傻子的直觉又很正确(无语,呜呜呜)。然后发现好像又和2的倍数有关系,这不就来了嘛。

  关于2的倍数,就按照题的样例,当你需要尽早得到5个细菌的时候,第一天晚上放进去1个,第二天晚上就会得到两个细菌,第三天晚上得到4个,那么在今天晚上再放进去一个,就刚好5个了。然后需要8个的话,就直接4天,刚好能得到8个细菌。然后关键的来了,这个样例我个人觉得非常具有迷惑性,所以我们来试试当你需要88个细菌的时候,最少需要几天,88/2=44   44/2=22   22/2=11,这个时候不是二的倍数了,就需要放进去一个细菌凑成二的倍数,12/2=6  6/2=3  又加一 4/2=2   2/2=1,知道第一天晚上只需要放一个的时候,这道题就出来了,所以代码如下:

 1 #include<stdio.h>
 2 #include<math.h>
 3 int main(){
 4     int a,sum=0;
 5     scanf("%d",&a);
 6     while(a){
 7         if(a&1) sum++;
 8         a>>=1;
 9     }
10     printf("%d",sum);
11     return 0;
12 } 

  其实代码可少了,思路很重要,emmmm,也可以直接求解,关于位运算,昨天的博客写了一点,很不完善,有空再写吧。

  嗯,每天一句:我是小废物,加油,继续水题去了。

  

标签:盒子,晚上,18,sum,然后,寒假,倍数,细菌,集训
来源: https://www.cnblogs.com/zm-23/p/14295762.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有