zoukankan      html  css  js  c++  java
  • [LOJ6087] 毒瘤题

    Description

    从集合中找出 (k le 2) 个出现了奇数次的正整数 (a),保证恰好有 (k) 个符合条件的正整数。(n le 3 imes 10^6),内存限制 (4MB)

    Solution

    一个数的情况很好处理,异或一下即可。考虑两个数的情况怎么办。

    假设出现奇数次的数是 (a,b),那么所有数字异或起来的结果一定是 (c = a oplus b)

    对每个二进制位维护 (w[i]),当读入一个 (x)(x) 的第 (j) 位是 (1) 的时候,就将 (w[j]) 异或上 (x)

    对于 (c)(1) 的最高位,(a,b) 的这一位一定不同,假设这是第 (j) 位,那么 (w[j]) 一定是其中的一个数。

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long 
    
    int k,n,w[32],a,b,c,x;
    
    signed main()
    {
        ios::sync_with_stdio(false);
        cin>>n>>k;
        while(n--)
        {
            cin>>x;
            for(int i=31;i>=0;--i)
            {
                if((x>>i)&1)
                {
                    w[i]^=x;
                }
            }
            c^=x;
        }
        for(int i=31;i>=0;--i)
        {
            if((c>>i)&1)
            {
                a=w[i];
                break;
            }
        }
        b=a^c;
        if(k==1)
        {
            cout<<c<<endl;
        }
        else
        {
            if(a>b) swap(a,b);
            cout<<a<<" "<<b<<endl;
        }
        system("pause");
    }
    
  • 相关阅读:
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    SpringMVC--->注解开发(各种注解的适应方法)
    SpringMVC--->入门(理解)
    SpringMVC--->Servlet回顾
    IDEA--->Maven不能继承HttpServlet
  • 原文地址:https://www.cnblogs.com/mollnn/p/13716447.html
Copyright © 2011-2022 走看看