日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDU5119 - Happy Matt Friends

發布時間:2023/12/3 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU5119 - Happy Matt Friends 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HDU5119 - Happy Matt Friends


做法:拆成兩堆數,分別暴力出兩組的所有異或值A,B,枚舉A, 將B全部插入Trie樹,通過枚舉的數每一位的值,確定異或后構成的新樹,然后在新樹上統計比m大的值的個數即可。

#include <bits/stdc++.h> #define pb push_back typedef long long ll; const int N = 1e6 + 7; using namespace std; int n, m, a[42], b[42], numa, numb; ll ans = 0; vector<int> va; struct node{int ch[2], num;void init() {ch[0] = ch[1] = -1;num = 0;} }T[N*20]; int cc, rt; void ins(int x) {int now = rt;for(int i = 22; i >= 0; --i) {int t = !!(x&(1<<i));if(T[now].ch[t] == -1) {T[now].ch[t] = ++cc;T[cc].init();}++T[now].num;now = T[now].ch[t];}++T[now].num; } int cal(int x) {int now = rt, ff = 0, ans = 0;for(int i = 22; i >= 0; --i) {int t = !!(m&(1<<i));int f = !!(x&(1<<i));if(!t) {if(T[now].ch[1^f]!=-1) ans += T[T[now].ch[1^f]].num;now = T[now].ch[0^f];}else {now = T[now].ch[1^f];}if(now == -1) break;}if(now != -1) ans+=T[now].num;return ans; } int TT, CC = 0; int main() {memset(T,0,sizeof(T));scanf("%d",&TT);while(TT--) {scanf("%d%d",&n,&m);for(int i = 0; i < n; ++i) scanf("%d",&a[i]);numa = n/2; numb = 0;for(int i = numa; i < n; ++i) b[numb++] = a[i];ans = 0;va.clear();for(int s = 0; s < (1<<numa); ++s) {int tmp = 0;for(int i = 0; i < numa; ++i) if(s&(1<<i)) tmp^=a[i];va.pb(tmp);}rt = cc = 0;rt = ++cc;T[rt].init();for(int s = 0; s < (1<<numb); ++s) {int tmp = 0;for(int i = 0; i < numb; ++i) if(s&(1<<i)) tmp^=b[i];ins(tmp);}for(int i = 0; i < va.size(); ++i) ans += 1LL*cal(va[i]);printf("Case #%d: %lld\n",++CC,ans);for(int i = 1; i <= cc; ++i) T[i].init();} }

轉載于:https://www.cnblogs.com/RRRR-wys/p/9710865.html

總結

以上是生活随笔為你收集整理的HDU5119 - Happy Matt Friends的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。