牛客练习赛 66B题解
前言
当初思路
开始没想到异或这么多的性质,于是认为对于每个点\(u\),可以和它连边的点\(v\)的点权 \(a_v=a_u \oplus k\)(证明:\(\because\) \(a_u\oplus a_v =k\) \(\therefore\) \(a_u\oplus a_v \oplus a_u=a_u \oplus k\) 即\(a_v=a_u \oplus k\)),于是每次将同一个点权的点放在一起,跑一遍dijkstra,然后超时了……(赛后重新提交,显示case通过率为32.00%)
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
const int MAXN=1e6+10,MAXLIMIT=1048577;
int n,q,a[MAXN],ans,k,x,y;
std::vector<int> m[MAXLIMIT];
bool vis[MAXN];
int dis[MAXN];
int main(){
scanf("%d %d",&n,&q);
for(int i = 1;i <= n;i++){
scanf("%d",&a[i]);
m[ a[i] ].push_back(i);
}
while(q--){
scanf("%d %d %d",&k,&x,&y);
memset(dis,~0xcf,sizeof(dis));
memset(vis,0,sizeof(vis));
dis[x] = 0;
vis[x] = 1;
ans = MAXN + 10;
priority_queue <pair<int, int> > q;
q.push(make_pair(0,x));
while(!q.empty() && ans > n){
int t = q.top().second; q.pop();
int togo = a[t]^k;
for(int i=0;i < m[togo].size();i++){
if(!vis[m[togo][i]]){
dis[m[togo][i]] = dis[t]+1;
if(m[togo][i] == y){
ans=dis[t] + 1;
break;
}
vis[m[togo][i]] = 1;
q.push( make_pair( dis[m[togo][i]],m[togo][i] ) );
}
}
}
if(ans <= n) printf("%d\n",ans);
else printf("-1\n");
}
return 0;
}
思路
实际上很简单,答案只有 -1,1,2 三种,我们注意到:对于每个点\(u\),和它连边的只有一种点权\(a_u \oplus k\),假设这种点为 \(v\) ,则能和\(v\) 连边的点权为 \(a_v \oplus k=a_u \oplus k \oplus k=a_u\) ,这意味着,对于每两个点 \(x\) , \(y\) , 要不是 \(a_x \oplus a_y =k\)则答案为1 就是 \(a_x==a_y\) 且存在 \(z\) 使 \(a_x \oplus k=a_z\) 则答案为 2 (先通过中转到 \(z\) ,再去 \(y\)),否则,答案为-1。
代码
一下子变简单了。
#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN = 1e6+10;
int n,q,a[MAXN],k,x,y,times[(1<<20) + 10];
int main(){
scanf("%d %d",&n,&q);
for(int i = 1;i <= n;i++) scanf("%d",&a[i]),times[ a[i] ]++;//记录每个权值出现次数
while(q--){
scanf("%d %d %d",&k,&x,&y);
if((a[x] ^ a[y]) == 0 && times[(a[x] ^ k)]>0) printf("2\n");//注意,必须要有中转的点才可输出2
else if( (a[x]^a[y]^k)==0 ) printf("1\n"); //可以直接连边
else printf("-1\n");//不能到达
}
return 0;
}
牛客练习赛 66B题解的更多相关文章
- 牛客练习赛24题解(搜索,DP)
A题,C题不讲,基础题(但是我要抨击一下这次比赛,卡cin,cout,卡的太狠了,根本就不让过的那种,QAQ) 链接:https://www.nowcoder.com/acm/contest/157/ ...
- 牛客练习赛66A题解
思路 令 \(sq=\sqrt x\) ,则答案必然在 $ sq^2$ 和 $ (sq+1)^2 $ 之间,两者比较一下谁离 \(x\) 最近,就是答案了. 代码 #include <bits/ ...
- 牛客练习赛26:D-xor序列(线性基)
链接:牛客练习赛26:D-xor序列(线性基) 题意:小a有n个数,他提出了一个很有意思的问题:他想知道对于任意的x, y,能否将x与这n个数中的任意多个数异或任意多次后变为y 题解:线性基 #inc ...
- 牛客练习赛11 假的字符串 (Trie树+拓扑找环)
牛客练习赛11 假的字符串 (Trie树+拓扑找环) 链接:https://ac.nowcoder.com/acm/problem/15049 来源:牛客网 给定n个字符串,互不相等,你可以任意指定字 ...
- 牛客练习赛64 D【容斥+背包】
牛客练习赛64 D.宝石装箱 Description \(n\)颗宝石装进\(n\)个箱子使得每个箱子中都有一颗宝石.第\(i\)颗宝石不能装入第\(a_i\)个箱子.求合法的装箱方案对\(99824 ...
- 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D
目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...
- 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B
牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...
- 牛客练习赛31 D 神器大师泰兹瑞与威穆 STL,模拟 A
牛客练习赛31 D 神器大师泰兹瑞与威穆 https://ac.nowcoder.com/acm/contest/218/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26214 ...
- 最小生成树--牛客练习赛43-C
牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...
随机推荐
- Nginx安装配置介绍(二)
一:Nginx安装(Windows) 官网地址:https://nginx.org/en/download.html 解压完成后,文件目录如下: 启动Nginx: 直接双击目录下的nginx.exe, ...
- 【Python】使用Selenium实现淘宝抢单
最近,小明为了达成小姐姐的愿望,在某宝买到心仪的宝贝,再加上又迷上了python,就通过python轻而易举地实现了(个人声明:对Java来说,这并不是背叛). 需求分析&前期准备 需求其实很 ...
- laravel --- composer install之后,项目没有vender目录
composer install之后,项目没有vender目录 1. 原因一:PHP版本过低 PHP版本需要7.1以上,目前使用的是7.0.23
- PHPstudy 2018 集成环境项目配置虚拟域名访问
1.首先启动PHPstudy2018,并停止它 2.点击“其他选项菜单->站点域名管理” 3.设置站点域名.项目目录,点击“新增”,再点击“保存并生成配置文件” 4.生产配置文件之后会重启,然后 ...
- VulnHub PowerGrid 1.0.1靶机渗透
本文首发于微信公众号:VulnHub PowerGrid 1.0.1靶机渗透,未经授权,禁止转载. 难度评级:☆☆☆☆☆官网地址:https://download.vulnhub.com/power ...
- python+opencv图像增强——拉普拉斯
img = cv2.imread(r'F:\python\work\cv_learn\clipboard.png',1) cv2.imshow('input',img) kernel = np.arr ...
- npm tip: go to the package's home page
exec the following order: --- npm home <package name>
- Linux CentOS 7 防火墙/端口设置【转发】
CentOS升级到7之后用firewall代替了iptables来设置Linux端口, 下面是具体的设置方法: []:选填 <>:必填 [<zone>]:作用域(block.d ...
- 这样基于Netty重构RPC框架你不可能知道
原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 今天是猿灯塔“365天原创计划”第5天. 今天呢!灯塔君跟大家讲: 基于Netty重构RPC框架 一.CyclicBarrier方法说明 1. ...
- CF796C Bank Hacking 题解
洛谷链接 题目 Although Inzane successfully found his beloved bone, Zane, his owner, has yet to return. To ...