懒猫--按位异或
來源:cf yayamao是只很笨的貓。它只認識偶數,它認為成雙成對才是完美的。所以對于yayamao來說偶數是可數的,奇數是不可數的。另外,yayamao它總是想寫亂七八糟的問題,可是自己又很笨,不會做。這不,這只傻貓又出了道亂七八糟的題目,只能請教你們來做做嘍。yayamao面前有N個食物,每一個食物都有一種代號V?,F在yayamao要開始整理這么多吃的東東了,就是說yayamao想要統計同一種食物一共有多少個。同時yayamao被告知這N個食物中僅有兩種食物是不可數的。yayamao的目的很簡單,能不能幫他找出這兩種不可數的食物?很簡單吧?是不是認為yayamao很笨啊?這么簡單都不會,還等什么呢?Kill it in seconds...
與50位技術專家面對面20年技術見證,附贈技術全景圖
Input
第一行一個T(1<=T<=10),代表有T組測試數據。每組數據的第一行是一個N(N<=10^6),代表yayamao面前有N個食物。接下來的一行有N個整數,第i個整數代表第i個食物的種類代號V[i]?(0<=V[i]<2^64)。Output
每組數據輸出兩個數A和B,A<B, 表示A,B兩種食物是不可數的。A,B中間隔一個空格,行末要換行。Sample Input
2 10 1 1 1 2 2 2 3 3 4 4 20 0 1 0 1 2 3 4 2 3 4 65535 65535 65535 789456123 789456123 789456123 10 10 10 10Sample Output
1 2 65535 789456123 #include<stdio.h> #include<algorithm> using namespace std; __int64 a[1000005]; int main() {int n,m,i;__int64 s,t,k,p;scanf("%d",&n);while(n--){scanf("%d",&m);s=0;for(i=0;i<m;i++){scanf("%I64d",&a[i]);s^=a[i];}t=s;k=t;int j=-1;while(k){int p=k%2;j++;if(p==1) break;k/=2;}for(i=0;i<m;i++){if(a[i]>>j&1)s^=a[i];}t^=s;printf("%I64d %I64d\n",min(t,s),max(t,s));} }與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
- 上一篇: nyoj-68--三点顺序
- 下一篇: 2020中国DevOps社区峰会(成都站