[cf1270I]Xor on Figures
考虑一个构造:令初始$2^{k}\times 2^{k}$的矩阵为$A$(下标从0开始),再构造一个矩阵$T$,满足仅有$T_{x_{i},y_{i}}=1$(其余位置都为0),定义矩阵卷积$\otimes$即
$$
(A\otimes B)_{x,y}=\bigoplus_{x_{1}+x_{2}\equiv x(mod\ 2^{k}),y_{1}+y_{2}\equiv y(mod\ 2^{k})}A_{x_{1},y_{1}}B_{x_{2},y_{2}}
$$
(不难证明这个卷积运算有交换律和结合律)
令$F$为答案矩阵,即$F_{x,y}$为在$(x,y)$上所选择的$p$(多次选择异或起来即可),根据定义有$F\otimes T=A$
考虑$\otimes$运算的单位矩阵$e$,即满足对于任意矩阵$A$,$A\otimes e=A$,不难发现$e_{x,y}=[x=0][y=0]$即满足此条件,以下即以此为单位矩阵
通过单位矩阵,我们就可以对矩阵$T$求逆了,若其求逆结果为$T^{-1}$(即满足$T\otimes T^{-1}=e$的矩阵因此),将上式两边同乘$T^{-1}$即有$F=A\otimes T^{-1}$
考虑如何求出$T^{-1}$,似乎并不太好求,那么再考虑一个问题,即$T^{2}$(即$T\otimes T$)是一个怎样的矩阵:
根据定义中的式子,注意到当交换$x_{1}$和$x_{2}$、$y_{1}$和$y_{2}$后,两者所贡献的位置以及权值相同,而$\oplus$具有自反性,因此即最终结果为0
但特别的,当$x_{1}=x_{2}$且$y_{1}=y_{2}$,显然是不能交换的,即
$$
(T^{2})_{x,y}=\bigoplus_{2x'\equiv x(mod\ 2^{k}),2y'\equiv y(mod\ 2^{k})}T_{x',y'}^{2}=\bigoplus_{2x'\equiv x(mod\ 2^{k}),2y'\equiv y(mod\ 2^{k})}T_{x',y'}
$$
(最后一步由于$T$中任意元素都为0或1,因此$T_{x',y'}^{2}=T_{x',y'}$)
上面这个式子通俗的来说,也就是将$T$中的每一个在$(x,y)$的1都移动到$(2x\ mod\ 2^{k},2y\ mod\ 2^{k})$,当一个位置有两个1可以相互抵消
当然我们也可以先不抵消,重复上述过程,则有
$$
(T^{2^{k}})_{x,y}=\bigoplus_{2^{k}x'\equiv x(mod\ 2^{k}),2^{k}y'\equiv y(mod\ 2^{k})}T_{x',y'}=[x=0][y=0]\bigoplus_{x,y}T_{x,y}=[x=0][y=0][t\ mod\ 2]
$$
(显然$T$中1的个数恰好为$t$)
根据$t$是奇数,即$T^{2^{k}}=e$,那么$T\otimes T^{2^{k}-1}=e$,即$T^{-1}=T^{2^{k}-1}$
关于如何计算$A\otimes T^{2^{k}-1}$,如果暴力计算两个矩阵复杂度是$o(2^{4k})$,即使用快速幂优化$T^{2^{k}-1}$的计算,复杂度也是$o(k2^{4k})$,无法通过
但是,注意到$\forall 0\le i\le k,T^{2^{i}}$至多只有$t$个1(即使移动到的位置都不重合,没有抵消)
根据$2^{k}-1=\sum_{i=0}^{k-1}2^{i}$,再根据结合律所求即$A\otimes T^{1}\otimes T^{2}\otimes...\otimes T^{2^{k-1}}$,按照运算顺序从左到右依次乘,每一次复杂度为$o(t2^{2k})$,总复杂度即$o(tk2^{2k})$
(每一个$T^{2^{i}}$怎么求前面应该也已经说明了)
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 2005
4 int n,m,ans,x[N],y[N];
5 long long a[N][N],b[N][N];
6 void mul(){
7 memset(b,0,sizeof(b));
8 for(int i=0;i<(1<<n);i++)
9 for(int j=0;j<(1<<n);j++)
10 for(int k=1;k<=m;k++)b[(x[k]+i)%(1<<n)][(y[k]+j)%(1<<n)]^=a[i][j];
11 memcpy(a,b,sizeof(a));
12 }
13 int main(){
14 scanf("%d",&n);
15 for(int i=0;i<(1<<n);i++)
16 for(int j=0;j<(1<<n);j++)scanf("%lld",&a[i][j]);
17 scanf("%d",&m);
18 for(int i=1;i<=m;i++)scanf("%d%d",&x[i],&y[i]);
19 for(int i=0;i<n;i++){
20 mul();
21 for(int j=1;j<=m;j++){
22 x[j]=2*x[j]%(1<<n);
23 y[j]=2*y[j]%(1<<n);
24 }
25 }
26 for(int i=0;i<(1<<n);i++)
27 for(int j=0;j<(1<<n);j++)
28 if (a[i][j])ans++;
29 printf("%d",ans);
30 }
[cf1270I]Xor on Figures的更多相关文章
- Wannafly Winter Camp 2020 Day 5J Xor on Figures - 线性基,bitset
有一个\(2^k\cdot 2^k\) 的全零矩阵 \(M\),给出 \(2^k\cdot 2^k\) 的 \(01\) 矩阵 \(F\),现在可以将 \(F\) 的左上角置于 \(M\) 的任一位置 ...
- [LeetCode] Maximum XOR of Two Numbers in an Array 数组中异或值最大的两个数字
Given a non-empty array of numbers, a0, a1, a2, … , an-1, where 0 ≤ ai < 231. Find the maximum re ...
- 二分+DP+Trie HDOJ 5715 XOR 游戏
题目链接 XOR 游戏 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- BZOJ 2115 【Wc2011】 Xor
Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 ...
- xor和gates的专杀脚本
前段时间的一次样本,需要给出专杀,应急中遇到的是linux中比较常见的两个家族gates和xor. 首先是xor的专杀脚本,xor样本查杀的时候需要注意的是样本的主进程和子进程相互保护(详见之前的xo ...
- Codeforces617 E . XOR and Favorite Number(莫队算法)
XOR and Favorite Number time limit per test: 4 seconds memory limit per test: 256 megabytes input: s ...
- Xor && 线性基练习
#include <cstdio> #include <cstring> ; ; int cnt,Ans,b,x,n; inline int Max(int x,int y) ...
- BC之Claris and XOR
http://acm.hdu.edu.cn/showproblem.php?pid=5661 Claris and XOR Time Limit: 2000/1000 MS (Java/Others) ...
- 异或链表(XOR linked list)
异或链表(Xor Linked List)也是一种链式存储结构,它可以降低空间复杂度达到和双向链表一样目的,任何一个节点可以方便的访问它的前驱节点和后继结点.可以参阅wiki 普通的双向链表 clas ...
随机推荐
- 数据库MySQL主从-GTID
1.第一步在主服务器上/etc/my.cnf/下添加 log-bin=log-bin server-id=1 gtid_mode=ON enforce_gtid_consistency 2.第二步:重 ...
- Ysoserial Commons Collections2分析
Ysoserial Commons Collections2分析 About Commons Collections2 CC2与CC1不同在于CC2用的是Commons Collections4.0; ...
- 题解 [HAOI2012]道路
题目传送门 题目大意 给出一个 \(n\) 个点 \(m\) 条边的有向图,问每一条边在多少个最短路径中出现. \(n\le 1500,m\le 5000\) 思路 算我孤陋寡闻了... 很显然,我们 ...
- nginx搭建网站踩坑经历
为了更好的阅读体验,请访问我的个人博客 前言 早上刷抖音刷到一个只需要三步的nginx搭建教程(视频地址),觉得有些离谱,跟着复现了一遍,果然很多地方不严谨并且省略了大量步骤,对于很多不了解linux ...
- UltraSoft - Alpha - Scrum Meeting 1
Date: Apr 06th, 2020. 会议内容为讨论功能规格书和技术规格书的撰写. Scrum 情况汇报 进度情况 组员 负责 昨日进度 后两日任务 CookieLau PM.后端 进行Djan ...
- STM32必学的时钟系统
STM32的时钟系统 相较于51单片机,stm32的时钟系统可以说是非常复杂了,我们现在看下面的一张图: 上图说明了时钟的走向,是从左至右的从时钟源一步步的分配给外设时钟.需要注意的是,上图左侧一 ...
- 密码学基础:AES加密算法
[原创]密码学基础:AES加密算法-密码应用-看雪论坛-安全社区|安全招聘|bbs.pediy.com 目录 基础部分概述: 第一节:AES算法简介 第二节:AES算法相关数学知识 素域简介 扩展域简 ...
- Java之父 James Gosling 发表博文 《Too Soon》纪念乔布斯。
几个礼拜前,我们还在讨论乔布斯的辞职.虽然我们都知道这意味着什么,但是我没有想到一切来的如此之快.已经有很多关于这件事情的文章了,特别是"经济学人"的这篇文章. 乔布斯是一个很独特 ...
- C++类的静态成员变量与静态成员函数
1.类的静态成员变量 C++类的静态成员变量主要有以下特性: 1.静态成员变量需要类内定义,类外初始化 2.静态成员变量不依赖于类,静态成员变量属于全局区,不属于类的空间. 3.静态成员变量通过类名访 ...
- 双链路接入(双出口)isp运营商(负载分担)
USG作为校园或大型企业出口网关可以实现内网用户通过两个运营商访问Internet,并保护内网不受网络攻击. 组网需求 某学校网络通过USG连接到Internet,校内组网情况如下: 校内用户主要分布 ...