数学问题 | 北邮OJ | 84. Single Number

https://vpn.bupt.edu.cn/http/10.105.242.80/problem/p/84/
wa到怀疑人生, 原来是要64位整数
在这里插入图片描述

map大法

#include <bits/stdc++.h>
#define FF(a,b) for(int a=0;a<b;a++)
#define F(a,b) for(int a=1;a<=b;a++)
#define LEN 510000
#define INF 1000000
#define bug(x) cout<<#x<<"="<<x<<endl;

using namespace std;
typedef long long ll;

int main(){
//	freopen("./in","r",stdin);
    int N;
    while(scanf("%d",&N)!=EOF){
        map<ll,int> cnt;
        F(i,N){
            ll t;
            scanf("%lld",&t);
            cnt[t]++;
        }
        map<ll,int>::iterator it=cnt.begin();
        while(it!=cnt.end()){
            if(it->second==1){
                printf("%lld\n",it->first);
                break;
            }
            it++;
        }
    }
    return 0;
}

位运算巨法

https://blog.csdn.net/birdstorm_s/article/details/19967311

#include <bits/stdc++.h>
#define FF(a,b) for(int a=0;a<b;a++)
#define F(a,b) for(int a=1;a<=b;a++)
#define LEN 510000
#define INF 1000000
#define bug(x) cout<<#x<<"="<<x<<endl;

using namespace std;
typedef long long ll;

int main()
{
//    freopen("./in","r",stdin);
    ll x, n, app_1, app_2, not_three;
    while(scanf("%lld",&n)!=EOF){
        app_1=0, app_2=0;
        while(n--){
            scanf("%lld",&x);
            app_2 |= app_1&x;
            app_1 ^= x;
            not_three = ~(app_1&app_2);//app_1&app_2 是出现3次
            app_1 = not_three&app_1;
            app_2 = not_three&app_2;
        }
        printf("%lld\n",app_1);
    }
    return 0;
}

两方法比较
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值