zoukankan      html  css  js  c++  java
  • 细菌培养

    Codeforces-579A   

    Raising Bacteria

    Codeforces Round #320 (Div. 2) [Bayan Thanks-Round]

    Time Limit:1000ms Memory Limit:262144 kB

    问题描述
    你是一个细菌爱好者。你想在一个盒子里培养一些细菌。起初,这个盒子是空的。每天早上,你可以在盒子里放任意数量的细菌;每天晚上,细菌将会繁殖,一分为二。你在某些时候,希望看到正好$x$个细菌。这些天内,你需要放至少多少个细菌呢?
    输入
    一个正整数$x$($1≤x≤10^9$)
    输出
    唯一的正整数:答案。
    样例
    Example 1:
    Input
    5
    Output
    2
    Example 2
    Input
    8
    Output
    1
    这题本身不难,主要是要看懂题目的意思。题目比较巧合的地方是,细菌只能一分二繁殖。$k$天内,一个细菌就可能变成$2^k$个,因此,最后要得到$x$个细菌,只要$x=sum_{n=1}^{N}t_i·2^{k_i}$成立;若初始细菌数量最少,则系数 $t_i$ 都为1。这与无符号整数的表示非常神似,因此可以使用位操作的方法来解。当然直接进行求解也是可以的。
     1 #include<iostream>
     2 int main()
     3 {
     4     using namespace std;
     5     int n;
     6     cin >> n;
     7     int count = 0;
     8     int sn = 536870912;
     9     for (;;)
    10     {
    11         if (n == 0)
    12             break;
    13         if (n / sn != 0)
    14             count++;
    15         n = n % sn;
    16         sn /= 2;
    17     }
    18     cout << count;
    19     return 0;
    20 }
     
  • 相关阅读:
    hdu 4407 Sum 容斥+当前离线
    2014第11周二开发记
    2014第11周一word样式
    2014第10周日
    2014第10周六
    2014第10周杂想
    2014第10周四项目开发回顾提纲
    2014第10周三高效程序员的习惯
    2014第10周二程序员思维
    2014第10周一
  • 原文地址:https://www.cnblogs.com/ggggg63/p/6535694.html
Copyright © 2011-2022 走看看