zoukankan      html  css  js  c++  java
  • P1469 找筷子

    整体来说,这个题很简单的,给我们n个数,找出这n个数里哪个数的个数是奇数

    我第一想法就是桶

    事实证明我的想法是对的

    #include<iostream>
    #include<cstdio>
    using namespace std;
    long long n,a[10000000],x;//这里数组要定义的大一些
    int main()
    {
        scanf("%lld",&n);//不用scanf的话会时间超限的
        for(int i=0;i<n;i++)
        {
            scanf("%lld",&x);
            a[x-1]+=1;//把数存到桶里
        }
        for(int i=0;i<=1000001;i++)
        {
            if(a[i]%2==1)//判断哪个是奇数
            {
                printf("%lld",i+1);//找到了就输出
                return 0;//因为不可能有第二个奇数、所以就直接结束
            }
        }
        return 0;
    }

    后来我发现有用异或的

    那是一个好东西

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int x,n,a;
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;++i)
        {
            scanf("%d",&a);
            x^=a;//一行就顶了我的好几行(;´д`)ゞ
        }
        cout<<x<<endl;
        return 0;
    }

    ^异或符号

    0^0=0,0^1=1 0异或任何数=任何数

    1^0=1,1^1=0 1异或任何数-任何数取反

    这个比我打的桶好了千万倍不止,不过我也学到了新知识

  • 相关阅读:
    P3383 【模板】线性筛素数
    POJ2431-Expedition【优先队列+贪心】
    HDU1087
    HDU1029
    最小生成树之Kruskal算法
    AC自动机模板
    328闯关解析
    php可获取客户端信息
    $( ).focus()与$( )[0].focus()区别
    RegExp类型和text()方法
  • 原文地址:https://www.cnblogs.com/zjylzf/p/12849660.html
Copyright © 2011-2022 走看看