zoukankan      html  css  js  c++  java
  • 基础数学问题 P1469 找筷子

    题目

    https://www.luogu.com.cn/problem/P1469

    题目分析

    在描述算法三之前先普及一下位运算。

    |(或)两个二进制数的或运算,即两个数的某个相同的位置上有1为1

    例如: 1000101 1001111 1001111即为两个数的或运算值(对于第1,4,5,6,7位上在两个数中找得到1)

    注意:若两个数的位数不相同,少的那个数用0补齐

    例如: 1000111 1000111 10011 运算可以看成 0010011这两个数来运算

    感性理解:对于每个位置上1为显性基因

    怎样区分|与&运算:|符号像1,即1为显性基因(即或运算) &(与)与|相反,0为显性基因,不理解的看上面的内容理解

    ^(异或)对于每个位置上进行不进位加法(进制为二进制),即1+1=0,1+0=1,0+0=0 然后

    算法三:对于两个相同的数,他们异或值为0

    证明:两个相同的数转化为二进制数必然也相同,上面已经说过,对于每位上的加法,无非就两种0+0,1+1值均为零 当我们把所有输入的数异或一遍,

    是不是相同的数都齐齐殉情了,这就变成了0^那个多余的数,而某个数异或0得到的值还是它本身 即ans为所有数的异或值

    参考:https://www.luogu.com.cn/blog/qjmm-qjmm/solution-p1469

    代码

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int list[10000002];
    int main()
    {
        std::ios::sync_with_stdio(false);
        std::cin.tie(0);
        std::cout.tie(0);
        int n,ans=0;
        cin >> n;
        for (int i = 0; i < n; i++)
        {
            int x;
            cin >> x;
            ans ^= x;
        }
        cout << ans;
    }
  • 相关阅读:
    Git的基本使用(只是基本使用)
    GET与POST的比较
    GO开发:链表
    阿里云啊
    以太坊区块和交易存储
    以太坊私有链部署合约
    以太坊go-ethereum签名部分源码解析
    GO开发:接口
    区块链开发:以太坊网络
    Go开发[八]goroutine和channel
  • 原文地址:https://www.cnblogs.com/Jason66661010/p/12855532.html
Copyright © 2011-2022 走看看