1. 程式人生 > 實用技巧 >[20200724NOIP提高組模擬T3]終章-劍之魂

[20200724NOIP提高組模擬T3]終章-劍之魂

題目大意:

  現有$n(n \leq 10^{6})$個int範圍內正整數,現欲取其中二數進行與操作,請求最大結果.

solution:

  欲解此題,必先熟悉位運算.位運算,玄學者也.現有一神奇解法,觀碼以解之.

code:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<queue>
#include<ctime>
#include
<map> #define R register #define next exnttttttttt #define debug puts("mlg") using namespace std; typedef int ll; typedef long double ld; typedef unsigned long long ull; inline ll read(); inline void write(ll x); inline void writesp(ll x); inline void writeln(ll x); ll n; ll num[1100000]; ll ans; int
main(){ freopen("sword.in","r",stdin); freopen("sword.out","w",stdout); n=read(); for(R ll i=1;i<=n;i++)num[i]=read(); for(R ll i=30;i>=0;i--){ ll t=0; for(R ll j=1;j<=n;j++) if(((ans&num[j])==ans)&&(num[j]&(1<<i))) ++t; if
(t>=2) ans+=(1<<i); } writeln(ans); } inline ll read(){ll x=0,t=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') t=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*t;} inline void write(ll x){if(x<0){putchar('-');x=-x;}if(x<=9){putchar(x+'0');return;}write(x/10);putchar(x%10+'0');} inline void writesp(ll x){write(x);putchar(' ');} inline void writeln(ll x){write(x);putchar('\n');}