牛牛愛位運算(與遠算,相與的結果小於等於自身)
阿新 • • 發佈:2020-08-20
題目連結:https://ac.nowcoder.com/acm/contest/6885/B
來源:牛客網
時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 262144K,其他語言524288K
64bit IO Format: %lld
題目描述:
牛牛正在學習位運算
他剛剛理解&的用法(and),準備趁熱打鐵,做做下面這題:
給定一個長度為n的序列a,你需要從中挑出任意多個(可以0個)數,使得他們&起來值最大。
看起來挺簡單的,可是牛牛就是不會做。
比如說選出五個數1,3,5,7,9,他們&起來的值就是1&3&5&7&9=1
輸入描述:
第一行,輸入一個數T,表示資料組數。
第2~(T+1)行,每行讀入一個數n,接下來讀入n個數,第i個數表示ai。
輸出描述:
對於每一組資料,你需要輸出&的最大值。
示例1
輸入
2
1 5
2 5 5
輸出
5
5
說明
第一組資料,顯然取5是最優的;
第二組資料,可以取兩個5,5&5=5是最優的。
備註:
資料保證1<=T<=100000, 1<=ai,n<= 10^5,並且∑n≤10 ^6。
題意:就是讓你選擇任意多個(可以0個)數,讓他們&起來值是最大的。
思路:直接找出n個數中最大的數即可。
原因:與(&)運算,一個數與其它任何數&,結果只會小於等於自己。
1&1=1
1&0=0
0&1=0
0&0=0
假如一個數的二進位制 num1 =0011010100100(前面補0)
另外一個數的二進位制 num2 = 1001000100111
相與的結果是: 0001000100100
顯然相與後的結果顯然是變小了
除非這兩個數相等,不然相與後一定變小。
程式碼:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int t; 6 cin>>t; 7 while(t--) 8 { 9 int n;10 int x; 11 int ans=0; 12 cin>>n; 13 for(int i=0;i<n;i++) 14 { 15 cin>>x; 16 ans=max(x,ans); 17 } 18 cout<<ans<<endl; 19 } 20 return 0; 21 }
加油!
共同努力!
Keafmd