• C. Johnny and Another Rating Drop(思维+二进制位)


    Problem - 1362C - Codeforces

     题意:

    这个男孩现在正在看以二进制系统写的连续参与者的评分。他认为,这种评分差异越大,这些人挨在一起就越不公平。他把两个数字之间的差异定义为位数,其中一个数字是0,另一个是1(我们假设数字的前导零填充到相同的长度)。例如,5=1012和14=11102的差值等于3,因为0101和1110相差3个位置。约翰尼将比赛的不公平性定义为相邻参赛者所计算的这种差异的总和。

    约翰尼刚刚给你发了评级序列,希望你能找出比赛的不公平性。你已经注意到,你已经得到了一个从0到n的连续整数序列。这很奇怪,但这个男孩固执地说一切都很正确。所以请帮助他,为收到的数字找到所需的不公平。

    输入
    输入由多个测试案例组成。第一行包含一个整数t(1≤t≤10000)--测试案例的数量。接下来的t行包含测试用例的描述。

    每个测试案例的第一行也是唯一一行包含一个整数n(1≤n≤1018)。

    输出
    输出t行。对于每个测试用例,你应该输出一个整数的单行--如果评分序列等于0,1,...,n-1,n,比赛的不公平性。

    题解:

    打表写几个例子

    0000
    0001
    0010
    0011
    0100
    0101
    0110
    0111
    1000
    1001

    第0位对答案的贡献为:9 也就是(n)
    第1位对答案的贡献为:4 也就是(n/2)
    第2位对答案的贡献为:2 也就是(n/22)
    第3位对答案的贡献为:1 也就是(n/23)

    以后写这种问题:

    考虑每一位对总值的贡献

    1. #include<iostream>
    2. #include<vector>
    3. using namespace std;
    4. int main()
    5. {
    6. int t;
    7. cin >> t;
    8. while(t--)
    9. {
    10. long long n;
    11. cin >> n;
    12. long long sum = 0;
    13. while(n)
    14. {
    15. sum += n;
    16. n = n/2;
    17. }
    18. cout<<sum<<"\n";
    19. }
    20. }

  • 相关阅读:
    Vue|项目结构与执行过程介绍
    读博时的建议或心得
    使用RTSP接入安防监控EasyCVR平台,如何配置系统参数以减少起播时间?
    ES6中的新增属性——解构赋值
    【结构型】享元模式(Flyweight)
    需求分析和常见的需求问题解决
    Debezium监控Oracle数据库
    《深度探索C++对象模型》阅读笔记 第六章 执行期语意学
    tp3.2和tp5.0的区别
    Nomad 系列-Nomad 挂载存储卷
  • 原文地址:https://blog.csdn.net/m0_64158084/article/details/127611754