一道位运算技巧题

来源:互联网 发布:姓氏头像制作软件 编辑:程序博客网 时间:2024/05/25 05:36

今天Mayuyu遇到一个非常有意思的题目,描述如下

 

题目:有一堆数,若干个数出现了3次,只有一个数出现了1次,找出只出现1次的那个数。

 

分析:把这个问题进行推广,得到如下描述

 

     有一堆数,除了一个元素出现次外,其它每个数都出现了次,现在需要找出出现次的这个数。

 

代码:

#include <bits/stdc++.h>using namespace std;const int N = 10005;int a[N];int singleNumber(int a[], int n, int p, int q){int *x = new int[p];x[0] = ~0;for(int i = 0; i < n; i++){int t = x[p - 1];for(int j = p - 1; j > 0; j--)x[j] = (x[j - 1] & a[i]) | (x[j] & ~a[i]);x[0] = (t & a[i]) | (x[0] & ~a[i]);}return x[q];}int main(){int n, p, q;while(cin >> n){for(int i = 0; i < n; i++)cin >> a[i];cin >> p >> q;int ans = singleNumber(a, n, p, q);cout << ans << endl;}return 0;}


 

0 0
原创粉丝点击