newcoder 筱玛的迷阵探险(搜索 + 01字典树)题解
题目描述
寒假终于到了,筱玛决定请他的朋友们一起来玩迷阵探险。
迷阵可以看做一个n×nn×n的矩阵A,每个格子上有一个有一个数Ai,j。
入口在左上角的(1,1)处,出口在右下角的(n,n)处。每一步都只能向下或向右移动一格。最后能获得的经验值为初始经验e与路径上经过的所有数的权值异或和。
求筱玛最大可能获得的经验值。
输入描述:
第一行两个整数n和e。
接下来n行,每行n个整数,描述矩阵A。
输出描述:
一个整数,表示筱玛最大可能获得的经验值。
链接:https://ac.nowcoder.com/acm/contest/545/D
思路:显然我们直接搜等于是在搜一颗二叉树,复杂度O(2^40)左右,肯定超时。但是我们可以用其他方法搜,先从左上角搜,,搜到对角线,然后把所有答案保存在01字典树里。再从右下角往回搜,遇到对角线直接在字典树搜最大异或,取最大值。

代码:
#include<cmath>
#include<cstdio>
#include<vector>
#include<cstring>
#include <iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn = + ;
const int INF = 0x3f3f3f3f;
struct node{
node* Next[];
node(){
for(int i = ; i < ; i++)
Next[i] = NULL;
}
};
node* e[maxn]; //走到对角线(含)
int mp[maxn][maxn];
int n, s;
void add(int x, int pos){
node* a = e[pos];
for(int i = ; i >=; i--){
int v = (x >> i) & ;
if(a ->Next[v] == NULL)
a ->Next[v] = new node();
a = a ->Next[v];
}
}
int query(int x, int pos){
node* a = e[pos];
int ret = ;
for(int i = ; i >= ; i--){
int v = (x >> i) & ;
if(a ->Next[!v] != NULL){
a = a ->Next[!v];
ret += ( << i);
}
else a = a ->Next[v];
}
return ret;
}
void dfs(int x, int y, int sum){
if(x + y == n + ){
add(sum ^ mp[x][y], x);
return;
}
dfs(x + , y, sum ^ mp[x][y]);
dfs(x, y + , sum ^ mp[x][y]);
}
int Max;
void dfsBack(int x, int y, int sum){
if(x + y == n + ){
Max = max(query(sum, x), Max);
return;
}
dfsBack(x - , y, sum ^ mp[x][y]);
dfsBack(x, y - , sum ^ mp[x][y]);
}
int main(){
scanf("%d%d", &n, &s);
for(int i = ; i <= n; i++){
e[i] = new node();
for(int j = ; j <= n; j++){
scanf("%d", &mp[i][j]);
}
}
dfs(, , s);
Max = -;
dfsBack(n, n, );
printf("%d\n", Max);
return ;
}
newcoder 筱玛的迷阵探险(搜索 + 01字典树)题解的更多相关文章
- 牛客练习赛37C 筱玛的迷阵探险 双向搜索+字典树
题意 筱玛是个快乐的男孩子.寒假终于到了,筱玛决定请他的朋友们一起来玩迷阵探险.迷阵可以看做一个的矩阵A,每个格子上有一个有一个数Ai,j.入口在左上角的(1,1)处,出口在右下角的(n,n)处.每一 ...
- AcWing:144. 最长异或值路径(dfs + 01字典树)
给定一个树,树上的边都具有权值. 树中一条路径的异或长度被定义为路径上所有边的权值的异或和: ⊕ 为异或符号. 给定上述的具有n个节点的树,你能找到异或长度最大的路径吗? 输入格式 第一行包含整数n, ...
- 字典树基础进阶全掌握(Trie树、01字典树、后缀自动机、AC自动机)
字典树 概述 字典树,又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它 ...
- Chip Factory---hdu5536(异或值最大,01字典树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5536 题意:有一个数组a[], 包含n个数,从n个数中找到三个数使得 (a[i]+a[j])⊕a[k] ...
- Xor Sum---hdu4825(01字典树模板)
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4825 题意:有n个数m个查找,每个查找有一个数x, 从序列中找到一个数y,使得x异或y最大 ...
- Codeforces Round #367 (Div. 2)---水题 | dp | 01字典树
A.Beru-taxi 水题:有一个人站在(sx,sy)的位置,有n辆出租车,正向这个人匀速赶来,每个出租车的位置是(xi, yi) 速度是 Vi;求人最少需要等的时间: 单间循环即可: #inclu ...
- hdu5296 01字典树
根据二进制建一棵01字典树,每个节点的答案等于左节点0的个数 * 右节点1的个数 * 2,遍历整棵树就能得到答案. AC代码: #include<cstdio> using namespa ...
- Choosing The Commander CodeForces - 817E (01字典树+思维)
As you might remember from the previous round, Vova is currently playing a strategic game known as R ...
- hdu-4825(01字典树)
题意:中文题意 解题思路:01字典树板子题 代码: #include<iostream> #include<algorithm> #include<cstdio> ...
随机推荐
- VS 统计整个项目总的代码行数
vs如何快速统计项目总代码行数呢,如下: vs编辑 | 查找和替换 | 在文件中查找 查找选项选 选择正则表达式 ^b*[^:b#/]+.*$ 设置如下: 结果在查找结果的最后一行,如下
- kali漏洞扫描
nmap (apt-get install nmap) nmap从初级到高级 ------------------------------ Nessus (dpkg -i Nessu ...
- Spark学习之路 (十五)SparkCore的源码解读(一)启动脚本
一.启动脚本分析 独立部署模式下,主要由master和slaves组成,master可以利用zk实现高可用性,其driver,work,app等信息可以持久化到zk上:slaves由一台至多台主机构成 ...
- vue-cli 脚手架搭建
1,下载node.js node.js 集成npm 管理器 2,打开命令行工具(win+R) node -v npm -v 出现对应版本号,则安装完成 3,配置代理信息 详见代理设定:https:// ...
- Spring 无缝整合 quartz
关键步骤: 1. 配置 SchedulerFactoryBean <bean class="org.springframework.scheduling.quartz.Schedule ...
- Shell 比较两个数的大小
格式很重要多一个空格少一个空格都可能出错 li@ubuntu:~/test$ cat compare.sh #!/bin/bash read x read y if [ $x -lt $y ] the ...
- SQL注入(dvwa环境)
首先登录DVWA主页: 1.修改安全级别为LOW级(第一次玩别打脸),如图中DVWA Security页面中. 2.进入SQL Injection页面,出错了.(心里想着这DVWA是官网下的不至于玩不 ...
- 使用Wisdom RESTClient进行自动化测试,如何取消对返回的body内容的校验?对排除的JSON属性字段不做校验?
使用 Wisdom RESTClient 进行自动化测试 REST API,默认是对返回HTTP状态码和body内容都进行严格匹配和校验. (1). 如果每次触发API返回的body内容是动态变化的, ...
- linux下can调试工具canutils安装过程记录
https://www.cnblogs.com/chenfulin5/p/6797756.html 一.下载源码 下载canutils和libsocketcan libsocketcan地址:http ...
- Android平台MediaCodec避坑指北
https://www.jianshu.com/p/5d62a3cf0741 最近使用MediaCodec做编解码H264,写一点东西以免自己再次掉坑. 先说一下具体环境,使用的是,Windows10 ...