HDU 5536 Chip Factory 字典树+贪心
生活随笔
收集整理的這篇文章主要介紹了
HDU 5536 Chip Factory 字典树+贪心
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
給你n個(gè)數(shù),a1....an,求(ai+aj)^ak最大的值,i不等于j不等于k
思路:先建字典樹,暴力i,j每次刪除他們,然后貪心找k,再恢復(fù)i,j,每次和答案取較大的,就是答案,有關(guān)異或的貌似很多都用字典樹,也是醉了
/*Problem : 5536 ( Chip Factory ) Judge Status : Accepted RunId : 15506230 Language : G++ Author : qianbi08*/#include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> #include <algorithm> #include<cstring> using namespace std; const int maxn=300005; int node[maxn][2],cnt,re[maxn]; int a[1005]; int newnode() {++cnt;node[cnt][0]=node[cnt][1]=-1;re[cnt]=0;return cnt; } void update(int v,int d) {int u=0;for(int i=30; i>=0; --i){int c=(v>>i)&1;if(node[u][c]==-1)node[u][c]=newnode();u=node[u][c];re[u]+=d;} } int getans(int v) {int u=0,ans=0;for(int i=30; i>=0; --i){if(u==-1)break;int c=(v>>i)&1;if(node[u][c^1]!=-1&&re[node[u][c^1]]){ans=(ans|(1<<i));u=node[u][c^1];}else u=node[u][c];}return ans; } int main() {int T;scanf("%d",&T);while(T--){int n;scanf("%d",&n);cnt=0;node[0][0]=node[0][1]=-1;re[0]=0;for(int i=1; i<=n; ++i)scanf("%d",&a[i]),update(a[i],1);int ans=0;for(int i=1; i<n; ++i){update(a[i],-1);for(int j=i+1; j<=n; ++j){update(a[j],-1);ans=max(ans,getans(a[i]+a[j]));update(a[j],1);}update(a[i],1);}printf("%d\n",ans);}return 0; } View Code?
轉(zhuǎn)載于:https://www.cnblogs.com/shuguangzw/p/4964491.html
總結(jié)
以上是生活随笔為你收集整理的HDU 5536 Chip Factory 字典树+贪心的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows update失败还原更改
- 下一篇: css常用效果