zoukankan      html  css  js  c++  java
  • 九度oj 题目1380:lucky number

    题目描述:
    每个人有自己的lucky number,小A也一样。不过他的lucky number定义不一样。他认为一个序列中某些数出现的次数为n的话,都是他的lucky number。但是,现在这个序列很大,他无法快速找到所有lucky number。既然这样,他就想找到那些不是lucky number。
    输入:
    输入有两行.
    第一行有n和m。n表示出现次数为n的是lucky number,m表示序列的长度。2<=n<=10,m<=10^6,m%n!=0。
    第二行为序列元素,每个元素都是正整数。
    输出:
    输出那个不是lucky number的数。题目保证非lucky number只有一个。
    样例输入:
    2 5
    1 1 2 2 3
    
    样例输出:
    3

    发现许多重复几次的问题用位运算都是很好的办法,本题把每一个数转化为32位的二进制数
    代码如下
     1 #include <cstdio>
     2 #include <cstring>
     3 
     4 int n, m;
     5 int num;
     6 int wnum[33];
     7 
     8 int main(int argc, char const *argv[])
     9 {
    10     while(scanf("%d %d",&n,&m) != EOF) {
    11 
    12         memset(wnum, 0, sizeof(wnum));
    13         int t = m % n;
    14         while(m--){
    15             scanf("%d",&num);
    16             for(int j = 0; j < 32; j++) {
    17                 int p = num&1;
    18                 wnum[j] = wnum[j] + p;
    19                 num = num >> 1;
    20             }
    21         }
    22         for(int j = 0; j < 32; j++) {
    23             wnum[j] = wnum[j] % n;
    24         }
    25         
    26         int ans = 0;
    27         
    28         for(int j = 31; j >= 0; j--) {
    29             ans = ans * 2 + wnum[j]/t;
    30         }
    31         printf("%d
    ",ans);
    32     }
    33     return 0;
    34 }

    比如

    2 5

    1 1 2 2 3

    结果是3

    编码得到

        00000001

        00000001

        00000010

        00000010

        00000011(因为数字比较小,省略了前面3位即24个0)

         求和 00000033

    取余      00000011 

    出现了m%n = 1次

    结果为3

    另外,设那个不为lucky_number的数为x,有

    x % n = sum%n = y
    m%n *x +sum(others) = sum

    不知道由这两点能不能启发出更好的办法

  • 相关阅读:
    linux安装及入门
    20165103学习基础和C语言基础调查
    20165103 我期望的师生关系
    自旋锁,偏向锁,轻量级锁 和 重量级锁
    volatile的使用及其原理
    (PASS)什么是原子性和原子性操作?
    Linux操作系统 和 Windows操作系统 的区别
    Linux常用命令大全(很全面)
    CAS机制总结
    CAS -- ABA问题的解决方案
  • 原文地址:https://www.cnblogs.com/jasonJie/p/5811729.html
Copyright © 2011-2022 走看看