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相关推荐

  1. HDU-5119 Happy Matt Friends

                           Happy Matt Friends Matt has N friends. They are playing a game together. Each ...

  2. Happy Matt Friends(HDU5119 + dp)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5119 题目: 题意: 求选择任意个数,使其异或和大于等于m的方案数. 思路: 每个数有选和不选两种方 ...

  3. 专访Matt Klein关于在Lyft构建Envoy的问答

    由Microservices.com主办的从业者峰会是一个由从业者驱动的微服务会议,该会议聚焦于现实世界应用中采用微服务的实际问题.该峰会2017年1月31日在美国旧金山召开,演讲嘉宾包括来自Uber ...

  4. HDU 5112 A Curious Matt 水题

    A Curious Matt Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid ...

  5. hdu 5112 A Curious Matt

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5112 A Curious Matt Description There is a curious ma ...

  6. nodejs开发工程师前景_Google NodeJS运行时团队的工程师Matt Loring访谈

    nodejs开发工程师前景 by Sameer Khoja 通过Sameer Khoja Google NodeJS运行时团队的工程师Matt Loring访谈 (An Interview with ...

  7. SitePoint播客#25:WordPress与Matt Mullenweg

    TheNicksterTheNickster Episode 25 of The SitePoint Podcast is now available! This week, Brad William ...

  8. iOS开发者Matt Gemmell谈iOS 7

    from: http://www.cocoachina.com/applenews/devnews/2013/0617/6422.html 本周早些时候,苹果发布并提供了iOS 7 的预览.正如外界所 ...

  9. DNSPod十问Matt Overman:二维码真的代替域名了吗?

    问答时间:2020年6月24日 嘉宾简介: Matt Overman(SVP):Donuts注册局高级副总裁,Matt负责领导域名货币化和高级域名市场.曾任NameJet总经理,领导其成为域名行业龙头 ...

最新文章

  1. 【工具】Internet Download Manager( IDM )抓取站点
  2. 灰度图像的对数变换原理及OpenCV代码实现
  3. java复用类_java复用类
  4. android确认密码代码,Android手机卫士之确认密码对话框
  5. 《信息安全系统设计基础》 实验五
  6. Python学习笔记-2017.8.08
  7. 微信小程序学习笔记-1-环境及基础结构
  8. STM32_Systick学习及例程改写
  9. Linux学习笔记——Centos6.4
  10. HTTP、SSL/TSL、HTTPS、TCP、UDP
  11. dell服务器管理口ip地址_常用服务器管理口IP及账号密码(欢迎补充)
  12. Luogu P2525题解
  13. FAT32文件系统FAT表修复
  14. Java垃圾回收的工作原理和最佳做法
  15. 如何修改PDF,PDF怎么旋转页面方向
  16. Android高级计算器
  17. Docker和Pycharm
  18. win10右键删除多余菜单
  19. [跟进]_微软关闭MSN博客,腾讯第一时间抢占市场
  20. 个人和企业如何注册腾讯云账号?

热门文章

  1. linux watch 文件大小,Linux watch命令的使用
  2. leetcode232. 用栈实现队列
  3. 10-1 5-1 查询销售便携式电脑但不销售PC的厂商 (20 分)(分析+详解)
  4. 卷死了!再不学vue3就没有人要你了!速来围观vue3新特性
  5. html css图标怎么跟文字并排,html - FA图标和文字环绕的HTML / CSS问题 - SO中文参考 - www.soinside.com...
  6. [RabbitMQ]队列持久化
  7. phpword 模板 多页_高中数学:各题型答题模板,吃透,灵活运用数学公式,解题更快!...
  8. Java Object有哪些公用方法?
  9. GPU Shader 程序调试方法
  10. Codeforces Round #656 (Div. 3) F. Removing Leaves 贪心 + 模拟