异或
酷酷的Herio
这个作者很懒,什么都没留下…
展开
-
E. Mahmoud and a xor trip(树DP)
E. Mahmoud and a xor trip(树DP)给定点权树,求所有异或路径和,p(u,v),p(v,u)p(u,v),p(v,u)p(u,v),p(v,u)只算一次。按位计算贡献,树dpdpdp即可。// Problem: E. Mahmoud and a xor trip// Contest: Codeforces - Codeforces Round #396 (Div. 2)// URL: https://codeforces.ml/contest/766/problem/E/原创 2021-07-27 17:10:43 · 251 阅读 · 0 评论 -
D. Kuro and GCD and XOR and SUM(Trie &筛)
D. Kuro and GCD and XOR and SUM(Trie &筛)建立MAXNMAXNMAXN棵01−Trie01-Trie01−Trie,然后每次把xxx加入其因子TrieTrieTrie中,然后查询的话,就贪心,没了。// Problem: D. Kuro and GCD and XOR and SUM// Contest: Codeforces - Codeforces Round #482 (Div. 2)// URL: https://codeforces.ml/pr原创 2021-07-27 16:45:30 · 270 阅读 · 0 评论 -
E. XOR Guessing(Meet in the Middle)
E. XOR Guessing(Meet in the Middle)先把14位折半一下。先取100个 高7位都为0的数,就可以确定xxx的高7位,然后取100个低7位都为0的数,就可以确定xxx的低7位。// Problem: E. XOR Guessing// Contest: Codeforces - Educational Codeforces Round 71 (Rated for Div. 2)// URL: https://codeforces.ml/problemset/prob原创 2021-07-27 15:53:03 · 269 阅读 · 0 评论 -
C. Xor Tree(分治)
C. Xor Tree(分治)从最高位开始分组,如果最高位都相同则继续递归下一位。否则分成两部分,显然具有相同位的数才可能相连。需要注意的情况就是某一个部分只有一个数时,是可以与另一个集合相连通的。所以我们就取集合较大的那一部分+1,作为答案数组,其他的都删掉。然后递归终止条件直接返回1.int n;vector<int>a;int dfs(int x,int l,int r){ if(l==r) return 1; if(!(a[l] & x) || (a[r] &原创 2021-07-27 15:35:24 · 320 阅读 · 0 评论 -
D. XOR-gun(Constructive &Xor)
D. XOR-gun(Constructive &Xor)考虑每个数的最高位,若存在连续3个最高位相同的,则可以操作前两个,答案为1.根据鸽巢原理,当超过2×(log2109+1)=602\times (log_210^9+1)=602×(log2109+1)=60个则必然答案为1。接下来我们只需考虑暴力。考虑答案,显然ansi=al⊕al+1⋯⊕arans_i=a_l\oplus a_{l+1}\dots \oplus a_ransi=al⊕al+1⋯⊕ar考虑最后答案,ans原创 2021-07-27 11:29:14 · 306 阅读 · 0 评论 -
E. Mahmoud and Ehab and the xor-MST(结论&Xor)
E. Mahmoud and Ehab and the xor-MST(结论&Xor)结论题。完全图边权为u⊕vu\oplus vu⊕v ,求MSTMSTMST.先 n=n−1n=n-1n=n−1答案是∑i=1nlowbit(i)\sum\limits_{i=1}^{n} lowbit(i)i=1∑nlowbit(i)因为nnn很大,考虑按位计算贡献。令lowbit(i)=xlowbit(i)=xlowbit(i)=x的个数是:f(x)f(x)f(x)则ans=∑i=12i≤nf原创 2021-07-27 10:56:20 · 287 阅读 · 0 评论 -
E. XOR on Segment(区间异或)
E. XOR on Segment(区间异或)区间异或,区间求和模板题。考虑按位计算,因为每位在异或时是独立的,所以每个结点开长度为202020的数组,表示每位1的个数。然后就线段树模板了。#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long ull; const int N=1e5+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;原创 2021-07-27 10:11:46 · 747 阅读 · 0 评论 -
P3760 [TJOI2017]异或和(BIT&位运算)
P3760 [TJOI2017]异或和(BIT&位运算)考虑对按位计算贡献。∑k=02k≤sn2k×(∑i=1n∑j=0i−1(si−sj)>>k&1)\large \sum\limits_{k=0}^{2^k\le s_n}2^k\times(\sum\limits_{i=1}^n \sum\limits_{j=0}^{i-1}(s_i-s_j)>> k \&1)k=0∑2k≤sn2k×(i=1∑nj=0∑i−1(si−sj)>>原创 2021-07-26 20:54:28 · 258 阅读 · 0 评论 -
关于树上路径异或和的思考
关于树上路径异或和的思考做树上路径异或时突发想到了一个问题,怎么求树上路径异或和之和,但是没找到题目。大概思路:1.树形dpdpdp求出从根出发的路径异或和dp[u]dp[u]dp[u]。2.显然我们需要的最终结果就是:∑dp[i]⊕dp[j](1≤i<j≤n)\sum dp[i]\oplus dp[j] (1\le i<j\le n)∑dp[i]⊕dp[j](1≤i<j≤n)。当n≤105n\le 10^5n≤105 显然不能暴力。3.考虑每一位的贡献。设cnt[i]c原创 2020-12-25 13:46:16 · 1058 阅读 · 0 评论 -
牛客练习赛32 B.Xor Path (异或&组合数学)
牛客练习赛32 B.Xor Path (异或&组合数学)题意:给定nnn个结点的树,每个结点带权,求所有路径异或和的(异或求和)。思路:考虑每个数被用的次数,如果是偶数就没用贡献,否则ans=ans⊕a[u]ans=ans\oplus a[u]ans=ans⊕a[u]。被用的次数分三种情况:1.以uuu为端点的路径数:n−1n-1n−1。2.从uuu的上面某个结点sss经过uuu到u的子树结点ttt:(n−size[u])×(size[u]−1)(n-size[u])\times (s原创 2020-12-25 13:21:28 · 379 阅读 · 0 评论 -
P3907 圈的异或(DFS&前缀和)
P3907 圈的异或(DFS&前缀和)传送门思路:dfs+dfs+dfs+前缀和。用一个数组vis[]vis[]vis[]标记结点是否访问过,若uuu的子结点vvv已经被访问过且不是父亲说明形成了一个环,我们还需要用一个pre[]pre[]pre[]数组记录前缀异或和,这里的前缀是相对dfsdfsdfs序说的,且根据异或的性质:如果对于环a→b→c→d→ba\rightarrow b\rightarrow c\rightarrow d\rightarrow ba→b→c→d→b搜到ddd时,原创 2020-07-02 18:50:27 · 407 阅读 · 0 评论 -
P3917 异或序列(位运算)
P3917 异或序列(位运算)传送门题意:给定序列求所有区间异或和的和。思路:经典异或题,显然需要按照位来计算贡献。我们需要先预处理前缀异或和,这样便于计算区间。对于当前位iii,我们只需看这个区间的异或和的该位是否为1,也就是该区间该位为1的个数为奇数,记cnt[j]cnt[j]cnt[j]为前jjj个数异或和位为111的个数,显然对于区间[l,r][l,r][l,r]我们只需让cnt[r]⊕cnt[l−1]cnt[r]\oplus cnt[l-1]cnt[r]⊕cnt[l−1]为奇数,即cnt[l原创 2020-07-02 16:06:32 · 591 阅读 · 1 评论 -
AtCoder Beginner Contest 172.F - Unfair Nim
AtCoder Beginner Contest 172.F - Unfair Nim传送门思路:异或的性质+构造。显然题目背景是NimNimNim游戏,我们目的是让后手胜,显然nnn堆石子异或为000时,后手必胜。接下我们需要构造来使nnn堆石子异或和为000。因为题目要求我们只能将移动第一堆石子给第二堆石子。我们记第一堆和第二堆石子个数分别为a,ba,ba,b。所以我们可以预处理第333堆到第nnn堆石子的异或和,我们记为ccc。设需要移动的石子数为xxx个。即我们要使:(a−x)⊕(b原创 2020-06-28 15:28:02 · 924 阅读 · 0 评论 -
异或图
异或图传送门思路:简单推一下:当len=1len=1len=1时:要满足a[u]⊕a[v]=ka[u]\oplus a[v]=ka[u]⊕a[v]=k当len>1len>1len>1时:ep:len=2ep:len=2ep:len=2时a[u]⊕a[x]⊕a[v]=k⊕a[v]=a[u]⊕ka[u]\oplus a[x]\oplus a[v]=k\oplus a[v]=a[u]\oplus ka[u]⊕a[x]⊕a[v]=k⊕a[v]=a[u]⊕k→a[u]==a[v],原创 2020-06-27 12:05:42 · 791 阅读 · 0 评论 -
异或的常见问题
异或的常见问题一.给定数组的异或和xxx与求和yyy,构造最短非负整数数组。思路:1.显然当x>yx>yx>y无解,就拿两个数来说,两个数异或和不可能大于两数和。且两者取等情况当且仅当,两数取1的位不同。在考虑奇偶性的情况,当xxx为奇数时,显然最低位的1要出现奇数次,则说明有奇数个奇数,再加上偶数,和肯定为奇数。当xxx为偶数时,显然最低位的1要出现偶数次,说明偶数个奇数,再加上偶数,和肯定为偶数。说明当x,yx,yx,y奇偶性不同时无解。所以x>yx>yx原创 2020-06-14 20:10:19 · 1260 阅读 · 0 评论