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

    大致题意:

    • 求 去掉偶数个的数 之后 剩下的数 是多少(真拗口/ts

    基本思路:

    • 用桶,但内存是个事

    • 排序去重,但好像也存不下

    • 嗯没招了...那换个思路?

    • 然后想到了'^'这个东西。

    • '^'现在不是什么次方,而是位运算。

    • 它的运算规则大概就是:

      1^1=0,1^0=1,0^1=1,0^0=0
      两个位相同为0,相异为1
        1 1 1 (7)
      ^ 0 1 0 (2)
      -----------
        1 0 1 (5)
      
    • 那么对于这道题又有什么用处呢?

    • 首先肯定的是异或两个相同的数为0,那么将2 2 1 3 3 3 2 3 1给换一换位置:1 1 2 2 3 3 3 3 2,每两位异或一下,得到的是0 0 0 0 2,可以得出一个结论:只要每个数的个数都是偶数个,那么全部异或后的结果是0。再看一个式子:

        0 0 0 (0)
      ^ 0 1 0 (2)
      -----------
        0 1 0 (2)
      

      那么。。答案和代码就出来了。。

    Code:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <queue>
    #include <stack>
    #include <map>
    #include <set>
    #include <list>
    using namespace std;
    #define R read()
    #define GC getchar()
    #define ll long long
    #define ull unsigned long long
    #define INF 0x7fffffff
    #define LLINF 0x7fffffffffffffff
    ll read(){
        ll s=0,f=1;
        char c=GC;
        while(c<'0'||c>'9'){if(c=='-')f=-f;c=GC;}
        while(c>='0'&&c<='9'){s=s*10+c-'0';c=GC;}
        return s*f;
    }
    int n;
    int ans;
    int main(){
        n=R;
        for(int i=1;i<=n;++i){//一直异或,最后的结果就是落单的那个
            ans^=R;
        }
        printf("%d",ans);
        return 0;
    }
    
  • 相关阅读:
    系统实践2-2:查看dockerfile-032092135mysql容器的配置信息
    系统综合实践1
    SDN——实验脚本7-2:hardtimeout.json
    SDN——实验脚本7-1:odlnorth.py
    实验 7:OpenDaylight 实验——Python 中的 REST API 调用
    预习非数值数据的编码方式
    预习原码补码
    C语言ll作业01
    C语言寒假大作战04
    C语言寒假大作战03
  • 原文地址:https://www.cnblogs.com/FUXyao/p/12845409.html
Copyright © 2011-2022 走看看