CodeForces - 948DPerfect Security ( 01字典树 )

Codeforces 1447E. Xor Tree(字典树/贪心) Codeforces Round #683 (Div. 2, by Meet IT) 全文见:https://blog.youkuaiyun.com/qq_43461168/article/details/113175011 E. Xor Tree 题意: 一个数组。每个元素会和与自己异或值最小的数连一条无向边。想要最终形成的图是一颗树。 至少要删掉几个元素。 思路: 首先肯定不会形成环。 为什么呢。因为一个值,只会和一个异或起来最小的值相连。要形成环。就说明至少要有一个元素。同时连向两个元素。这显然不符合条件。环中边 阅读详情
题目链接:点击进入
题目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题意

O [ i ] xor Π( p [ i ] )= a [ i ] , Π( p [ i ] )代表对 p 序列的重新排序后 p [ i ] 的下标,给你 p , a 序列,让你求字典序最小的 O 序列

思路

O [ i ] xor Π( p [ i ] )= a [ i ] =》O [ i ] = a [ i ] xor Π( p [ i ] )
让 O [ i ] 尽可能小,就是让 a [ i ] 异或一个 p 值越小越好,那么就顺序遍历每一位,对于每个 a [ i ] 选目前还剩下的 p 值中异或最小的。( 每个 p [ i ] 值只能选一次 )
异或最小,01字典树,每一位尽量选相同的。

代码
// Problem: Perfect Security
// Contest: Virtual Judge - CodeForces
// URL: https://vjudge.net/problem/CodeForces-948D
// Memory Limit: 524 MB
// Time Limit: 3500 ms
// 
// Powered by CP Editor (https://cpeditor.org)

//#pragma GCC optimize(3)//O3
//#pragma GCC optimize(2)//O2
#include<iostream>
#include<string>
#include<map>
#include<set>
//#include<unordered_map>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<fstream>
#define X first
#define Y second
#define base 233 
#define INF 0x3f3f3f3f3f3f3f3f
#define pii pair<int,int>
#define lowbit(x) x & -x
#define inf 0x3f3f3f3f
//#define int long long
//#define double long double
//#define rep(i,x,y) for(register int i = x; i <= y;++i)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const double pai=acos(-1.0);
const int maxn=1e7+10;
const int mod=1e9+7;
const double eps=1e-9;
const int N=5e3+10;
/*--------------------------------------------*/
inline int read()
{
    int k = 0, f = 1 ;
    char c = getchar() ;
    while(!isdigit(c)){if(c == '-') f = -1 ;c = getchar() ;}
    while(isdigit(c)) k = (k << 1) + (k << 3) + c - 48 ,c = getchar() ;
    return k * f ;
}
/*--------------------------------------------*/

int n,a[maxn],p[maxn];
int t[maxn][2],tot;
int val[maxn],cnt[maxn];

void insert(int x,int k)
{
	int p=0;
	for(int i=31;i>=0;i--)
	{
		int to=(x>>i)&1;
		if(!t[p][to])
			t[p][to]=++tot;
		p=t[p][to];
		cnt[p]++;
	}
	val[p]=k;
}
void del(int x)
{
	int p=0;
	for(int i=31;i>=0;i--)
	{
		int to=(x>>i)&1;
		p=t[p][to];
		cnt[p]--;
	}
}
int find(int x)
{
	int p=0;
	for(int i=31;i>=0;i--)
	{
		int to=(x>>i)&1;
		if(t[p][to]&&cnt[t[p][to]])
			p=t[p][to];
		else
			p=t[p][to^1];
	}
	return val[p];
}

int main() 
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=1;i<=n;i++)
	{
		cin>>p[i];
		insert(p[i],i);
	}
	for(int i=1;i<=n;i++)
	{
		int pos=find(a[i]);
		del(p[pos]);
		cout<<(a[i]^p[pos])<<' ';
	}
    return 0;
} 
弥散圆以及最大弥散圆 1弥散圆的形成? 原本景物中的一点应该经过透镜本应该也是一点才对。但是因为离焦,球差的存在,最终成像会投影成一个光斑圆圈。越小越清晰,越大就互相干涉变得越模糊。 同时人们规定二零最大弥散圆,就是人眼能够感受清晰模糊的一个边界,直径大于它,感受到模糊;直径小于它,感受不到模糊。 下面分别是离焦(左),球差(右)。 2弥散圆大小怎么计算呢? ,f为焦距;<1> ,D为光圈有效孔径;<2> F=f/D; <3> 3条公式合并可得出: ... 阅读详情

相关推荐

10xGenomics官方可视化工具——Loupe Browser

Loupe Browser是⼀款10xGenomics开发的交互式桌⾯应⽤程序,⽤于探索10x单细胞数据,可以用来找出感兴趣的细胞、找出显著差异表达的基因、鉴定细胞类型、探索细胞亚类和数据共享。

weixin_47195452的博客 3357

【CodeForces】- 633C(字典树+DFS)

题目链接:http://codeforces.com/problemset/problem/633/C   题目大意:给你一个长度为N的字符串,这个字符串是由一句完整的话 单词拆分开之后每个单词变小写并翻转的来的,现在给你这个长度为N的字符串,还给你他的原来的组成成分,你要还原这句话,其中有的单词可能是多余的 思路:因为后面比较的时候我们用的是反着来的单词,所以直接反着建立一颗字典树就...

红点雷龙XL 711

stm32学习笔记-启动文件

1、配置栈 Stack_Size EQU 0x00000400 AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE Stack_Size __initial_sp EQU:相当于C中的define,定义Stack_Size = 0x00000400。 AREA: 指...

某风吾起的博客 4529

[CodeForces948D]Perfect Security(01字典树)

题目链接:D. Perfect Security 题目大意:给定一个数组,要从另外一个数组中找到依次找到一个数,是它和数组对应的值的异或值最小。 题目思路:标准的01字典树,其中涉及字典树的构建,添加,查找和删除,可以作为一个典型的字典树模板题。 个人理解,如果字典树是26叉树,那么01字典树就是2叉树。 先上代码,在代码里面解释: 不知道,为什么我的代码传上来就是没有颜色的,很伤心 #inclu...

qq_43816599的博客 233

MCP4728 电路及stm32F103程序移植

写在前面 通过优快云查到一些MCP4728 的程序,结合程序及datasheet对于驱动的描述,理清了思路 感谢开路者! MCP4728的电路比较简单,见下文描述 应用电路 datasheet: 实际测试电路: SCL接stm32的PB10,SDA接PB11 RDY/BSY引脚和LDCA引脚,悬空 解释见截图: MCP4728地址 选择任意输出通道写入DAC输入寄存器 应用程序 int mcp4728_write_all_channel(float vol1, float vol2, fl

u013074298的专栏 5425

避坑指南:华为2288H-V5服务器安装系统时常见的RAID与驱动问题解决方案

本文针对华为2288H-V5服务器在安装系统时常见的RAID与驱动问题,提供了详细的避坑指南。文章深度解析了从BIOS版本兼容性核查、RAID配置实战到驱动加载与集成的全流程,重点解决了安装过程中因RAID控制器驱动缺失或兼容性问题导致的硬盘无法识别等典型故障,帮助用户高效完成系统部署。

weixin_29240711的博客 978

0 1字典树 CodeForces - 948D

CodeForces - 948D 0 1字典树,这里给出两种方法,一种字典树,一种multiset寻找,要慢一点 方法一 //#include &lt;bits/stdc++.h&gt; #include&lt;stdio.h&gt; #include&lt;string.h&gt; #include&lt;string&gt; #include&lt;math.h&gt; #in...

Taboo 415

【低轨】Starlink星链-Ku波段下行信号信号结构解析

Starlink播发位于10.7~12.7GHz之间的下行信号,该信号的设计意图是用于宽带网络通信,但是,文章通过对该信号信号体制的详细分析,以及解调出所调制的完整码序列,为利用Starlink信号进行定位解算提供了必要条件。(注,码序列对应的是卫星版本0.9,1.0和1.5)

iseeinvisible的博客 6301

Codeforces Round #462 (Div. 2):C. A Twisty Movement(预处理)

C. A Twisty Movementtime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputA dragon symbolizes wisdom, power and wealth. On Lunar New Year's Day, people m...

Mitsuha_的博客 1043

VHDL语法学习笔记:一文掌握VHDL语法

今天给大侠带来FPGA 之 VHDL 语法学习笔记,话不多说,上货。 VHDL语法学习笔记 一、VHDL简介 1.1 VHDL 的历史 VHDL 的 英 文 全 名 是 Very-High-Speed Integrated Circuit Hardware DescriptionLanguage,诞生于 1982 年。 1987 年底,VHDL 被 IEEE 和美国国防部确认为标准硬件描述语言。自 IEEE 公布了 VHDL 的标准版本 IEEE-1076(简称 87 版)...

2万+

13.0 针对跳转不存在Activity崩溃处理,改成弹Toast提示,去掉崩溃弹窗,避免app崩溃退出

在开发过程中,在app跳转到某个没注册的Acitivity时,往往会出现崩溃的场景,这样也不好,接下来就从framework中来拦截这个崩溃,改成toast提示,

安卓兼职framework和app工程师的博客 48

Codeforces 948D Perfect Security

01字典树#include&lt;bits/stdc++.h&gt; using namespace std; const int maxn=3e5+10; #define ll long long ll a[maxn],b[maxn],sn,ans[maxn],siz,cnt[maxn*40][2]; ll sum[maxn*40]; inline void insert(ll x) { ...

m0_37389559的博客 439

一个中科大差生的8年程序员工作总结

今年终于从大菊花厂离职了,离职前收入大概60w不到吧,在某乎属于比较差的,今天终于有空写一下自己的职场故事,也算是给自己近8年的程序员工作做个总结复盘。近8年有些事情做对了,也有更多事情做错了,在这里记录一下,希望能够给后人一些帮助吧,也欢迎私信交流。文笔不好,见谅,有些细节记不清了,如果有出入,就当是我编的这个故事吧。 PS:有几个问题先在这里解释一下,评论就不一一回复了 1、关于差生,我本人在科大时确实成绩偏下,差生主要讲这一点,没其他意思。 2、因为买房是我人生中的大事,我认为需要记录和总结一下

陈小房的自我修炼 5万+

codeforces 948D

Perfect Security 给2个长度为n的数组a, p, 改变p顺序,使得a^p 得出来的数组字典序最小 思路: 以p数组建字典树, 然后每次找与ai最“接近”的数(即俩数异或最小, 每次再从字典树中删除该数即可 #include "iostream" #include "iomanip" #include "string.h" #include "stack" #inc...

weixin_30483013的博客 130

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【codeforces948D】 Curfew

time limit per test:2 seconds memory limit per test:512 megabytes input:standard input output:standard output Description Instructors of Some Informatics School make students go to bed. The hous...

white_elephant的博客 472

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Perfect Security CodeForces - 948D 01字典树解决XOR最值问题

题意:给一个整数数组A 和一个整数数组P 求A与P的某个排列的异或的最小字典序数列转化一下 其实就是从A1开始 每个数在P中求一个对应的异或的最小值 那就可以把P插入一棵01字典树中 然后用A去查找那棵树的最小值其实关于XOR的最值问题很多都应该用01字典树去解决 这题是一个模板题#include &lt;cstdio&gt; #include &lt;iostream&gt; #include ...

weixin_39302444的博客 300

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Codeforces-948D:Perfect Security(Trie树)

D. Perfect Securitytime limit per test3.5 secondsmemory limit per test512 megabytesinputstandard inputoutputstandard outputAlice has a very important message M consisting of some non-negative integers...

Mitsuha_的博客 763

Codeforces Round #683 Div2 E Xor Tree(字典树,树上问题)

E. XOR Tree 题目描述 给出nnn个点,每个点有一个值aia_iai​,对于每个点,它将找到其余所有点中与其异或和最小的点,并且与之连上双向边,问最少要在给出数组中删掉多少数才能使得剩余的数经过这样的操作能变成一颗树。 思路 同样又是熟悉的最小异或点对的问题,容易联想到CF之前的另一道XOR MST。同样首先最直接的想法是n2n^2n2的暴力求最小点对,但是显然会T飞。正解是01字典树,同样这题也是基于01字典树去思考。首先是熟悉的思路,对于某个特定01串的最小异或和串,应该是从最高位到最低位去贪

hzerotole的博客 361

Binary Table (Hard Version)-(思维)

题目描述:点击进入 题意 给你一个大小为n×m的二进制表,这个表由符号 0 和符号 1 组成。 你可以进行这样的操作: 选择属于一个 2 × 2 正方形的 3 个不同的单元格,并更改这些单元格中的符号(将 0 更改为1, 1 更改为 0 )。 你的任务是使表中的所有符号都等于0。您最多可以进行 nm次 操作。 你不需要最小化操作的数量。 思路 这是上一题的加强版,操作次数变为 nm 了,我上一次的代码过不去,无奈只能优化,但也只是对边界处理优化了一下,却神奇过了(神奇神奇,用xy哥的话来说那就是可蒸馏啊)

Cosmic_Tree的博客 1780

k-LCM ( easy version && hard version ) -( 思维 - 构造 )

题目链接(easy):点击进入 题目链接(hard):点击进入 题目 题意 长度为 k 的数组,整个数组的和为 n ,整个数组的最小公倍数不超过 n / 2,让你构造这样一个数组 简单版本k=3,困难版本 3 <= k <= n。 思路 简单版本: 因为明确告诉你了 k = 3 ,同时要求三个数的最小公倍数不能超过 n / 2,所以我们可以根据 n 来构造这个三个数。 首先根据 n 的奇偶性分类讨论 如果 n 是奇数,那么三个数可以变为 n / 2 , n / 2 , 1 ; 如果 n 是偶

Cosmic_Tree的博客 1189

Binary Table (Easy Version)-(思维)

题目描述:点击进入 题意 给你一个大小为n×m的二进制表,这个表由符号 0 和符号 1 组成。 你可以进行这样的操作: 选择属于一个 2 × 2 正方形的 3 个不同的单元格,并更改这些单元格中的符号(将 0 更改为1, 1 更改为 0 )。 你的任务是使表中的所有符号都等于0。您最多可以进行 3nm次 操作。 你不需要最小化操作的数量。 思路1 通过找找规律,我们可以知道一个 2*2 的矩阵 不包含0的可以通过一次操作变为包含3个0的, 包含3个0的通过一次操作可以变为包含2个0的, 包含2个0的通过一次

Cosmic_Tree的博客 840

Codeforces Beta Round #68 - B- Train ( 贪心模拟 )

题目链接:点击进入 题目 题意 偷渡者和控制者玩以下游戏。 火车由 n 节车厢表示,车厢从头到尾用 1 到 n 的正整数编号。偷渡者和控制者最初在两辆不同的货车中。火车每分钟都可能处于两种状态移动或空闲。控制者每分钟都在移动。 控制器有运动方向——火车头或火车尾。在移动期间,控制者对应于其移动方向移动到相邻的货车。如果在他的移动结束时,控制者进入第 1 辆或第 n 辆货车,那么他将移动方向更改为另一侧。换句话说,控制者在整个游戏过程中循环地从火车的头部到尾部然后再返回,在每次移动期间移动一辆车。请注意,

Cosmic_Tree的博客 747

CodeForces - 1549C - Web of Lies( 思维 )

题目链接:点击进入 题目 题意 n个人m对朋友关系( 双向 ),q次操作: 1 u v u与v成为朋友 2 u v u与v朋友关系破灭 3 计算以下过程的答案: 过程:所有易受伤害的贵族同时被杀害,他们的友谊也随之结束。这样,新贵族就有可能变得脆弱。这个过程不断重复,直到没有贵族受到伤害。可以证明,这个过程将在有限的时间内结束。完成此过程后,您需要计算剩余贵族的数量。( 如果满足以下两个条件,则贵族被定义为易受攻击:至少有一个朋友,那位贵族的所有朋友都有更高的权力。) 注意,该过程的结果不会在查询

Cosmic_Tree的博客 634

CodeForces 1267

题目:B–Balls of Buma 题意 给你一个字符串(代表不同颜色),让你插入一个字符(一种颜色)后,可以消掉整个字符串。(相同颜色、长度变长、长度>=3才会抵消) 思路 将原串变成“种类串”(例如:AABBAA—> ABA)后,“种类串”应当是回文串,且长度应该是奇数。 同时,一个可以被消去的串,根据中心对称的同类部分的长度和,应当>=3。中心部分长度应当>=2.满足以上条件,答案为中心部分答案+1; 代码 #include<iostream> #include&

Cosmic_Tree的博客 583

CodeForces - 1549D - Integers Have Friends ( 差分 - 线段树 - 双指针 )

题目链接:点击进入 题目 题意 定义一个友好区间为,存在一个 m ( m >= 2 ),使区间内的所有数 % m 值相等,让你求给定数组的最大友好区间长度。 思路 如果两个数 x , y , 取模后的值相同,则需要满足:| x - y | % mod == 0。 若是一个区间内 % mod 值相等,则是所有差值的 gcd。 所以根据这一特性,我们不难想到对原数组差分,然后区间求 gcd( 区间求 gcd 可以用线段树来实现 ),然后我们再用双指针维护一个 右端点 指定 的情况下 左端点最远 且

Cosmic_Tree的博客 577

CodeForces - 1557C - Moamen and XOR ( 位运算 + 排列组合 )

题目链接:点击进入 题目 题意 规定长度为 n 的数组要是满足 a1a_1a1​&a2a_2a2​&…ana_nan​ >= a1⊕a2⊕a_1 \oplus a_2 \oplusa1​⊕a2​⊕…⊕an\oplus a_n⊕an​ 则认为是胜利。在每个数组元素小于 2k2^k2k 的前提下,问有多少种数组 a 满足胜利的条件。 思路 看到这个 2k2^k2k ,当时就想到多半按位来看。若是固定每一位,然后看 n 个数这一位的与运算 与 n 个数这一位的异或运算。异或运算有个规律,

Cosmic_Tree的博客 569
上一篇: CodeForces - 716B Complete the Word( 暴力 )
下一篇: CodeForces - 432D Prefixes and Suffixes ( kmp + dp )
Cosmic_Tree
博客等级 码龄7年 134粉丝 337原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值