Description

Zyh独自一人在街上漫步。Zyh相信不久后应该就可以和她一起漫步,可是去哪里寻找那个她呢?Zyh相信每个人都有一个爱情的号码牌,这个号码牌是一个n*n的矩阵。
每个人都要在矩阵中选择若干个元素,使得每行每列都有奇数个数被选中,且选中的数字的乘积是完全平方数。每当选出了这若干个元素,他/她就能找到那个她/他。
Zyh想知道对于一个号码牌有多少种选择的方法,使得zyh能够不再孤独。由于这个数字很大,只要输出对1,000,000,007取模后的余数即可。

Solution

我们设Pi,jP_{i,j}表示(i,j)(i,j)这个格子选不选。

现在有两个条件:
1. 使得每行每列都有奇数个数被选中
2. 选中的数字的乘积是完全平方数

我们先看条件1,那么要满足:
Pi,1⊕Pi,2⊕⋯⊕Pi,n=1(1≤i≤n)P_{i,1}⊕P_{i,2}⊕\cdots ⊕P_{i,n}=1(1\leq i\leq n)
P1,j⊕P2,j⊕⋯⊕Pn,j=1(1≤j≤n)P_{1,j}⊕P_{2,j}⊕\cdots ⊕P_{n,j}=1(1\leq j\leq n)
(这里的⊕是异或的意思)

再看条件2:
我们把所有数分解质因数,记出现的质数为p1,p2,⋯,pmp_1,p_2,\cdots,p_m。

定义f(k,x)f(k,x)表示xx这个数是包含了奇数还是偶数个第kk个质数因子,分别用1或0表示。

举个例子:
72=23⋅3272=2^3\cdot 3^2
那么f(2,72)=1,f(3,72)=0f(2,72)=1,f(3,72)=0

然后对于第kk个质数,我们可以得出式子:
P1,1f(pk,a1,1)⊕P1,2f(pk,a1,2)⊕⋯⊕Pn,nf(pk,an,n)=0P_{1,1}f(p_k,a_{1,1})⊕P_{1,2}f(p_k,a_{1,2})⊕\cdots⊕P_{n,n}f(p_k,a_{n,n})=0

然后我们得出了一些式子,这就是很经典的异或方程组模型,用高斯消元求自由元个数tt,答案就是2t2^t。

Code

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define fo(i,j,k) for(int i=j;i<=k;i++)
#define fd(i,j,k) for(int i=j;i>=k;i--)
#define rep(i,x) for(int i=ls[x];i;i=nx[i])
#define N 31
#define M 3001
#define ll long long
#define mo 1000000007
#define mod 300007
using namespace std;
int a[M][N*N];
int n;
int bh[M][N*N];
int pr[M];
int h[mod],wz[mod];
int w;
bool hash(int x)
{int p=x%mod;while(h[p] && h[p]!=x) p=(p+1)%mod;w=p;if(h[p]==x) return true;return false;
}
int g(int x,int y){return (x-1)*n+y;
}
int gauss(int tot,int m)
{int i=0,j=0;while(i<m && j<tot){int r=i;fo(k,i,m) if(a[k][j]) {r=k;break;}if(a[r][j]){if(r!=i)fo(k,0,tot) swap(a[i][k],a[r][k]);fo(l,i+1,m-1) if(a[l][j])fo(k,i,tot) a[l][k]^=a[i][k];int t=0;i++;}j++;}fo(i,0,m-1){int t=0;fo(j,0,tot-1) t+=a[i][j];if(!t && a[i][tot]==1) return -1;}return i;
}
int main()
{scanf("%d",&n);fo(i,1,n)fo(j,1,n){ll x;scanf("%lld",&x);int p=2;while(p*p<=x){int t=0;bool tf=hash(p);if(x%p==0 && !tf){pr[++pr[0]]=p;wz[w]=pr[0];h[w]=p;}while(x%p==0) x/=p,t^=1;bh[wz[w]][g(i,j)]=t;p++;}if(x>1){bool tf=hash(x);if(!tf){pr[++pr[0]]=x;wz[w]=pr[0];h[w]=x;}bh[wz[w]][g(i,j)]=1;}}int m=0;fo(i,1,n){fo(j,1,n) a[m][g(i,j)-1]=1;a[m][n*n]=1;m++;}fo(j,1,n){fo(i,1,n) a[m][g(i,j)-1]=1;a[m][n*n]=1;m++;}fo(p,1,pr[0]){fo(i,1,n)fo(j,1,n)a[m][g(i,j)-1]=bh[p][g(i,j)];a[m][n*n]=0;m++;}int t=n*n-gauss(n*n,m);if(t==n*n+1){printf("0");return 0;}ll ans=1;fo(i,1,t) ans=ans*2%mo;printf("%lld",ans);
}

【JZOJ3823】遇见相关推荐

  1. jzoj3823 遇见 [高斯消元解异或方程组]

    Description Zyh独自一人在街上漫步.Zyh相信不久后应该就可以和她一起漫步,可是去哪里寻找那个她呢?Zyh相信每个人都有一个爱情的号码牌,这个号码牌是一个n*n的矩阵. 每个人都要在矩阵 ...

  2. 当莎士比亚遇见Google Flax:教你用​字符级语言模型和归递神经网络写“莎士比亚”式句子...

    作者 | Fabian Deuser 译者 | 天道酬勤 责编 | Carol 出品 | AI科技大本营(ID:rgznai100) 有些人生来伟大,有些人成就伟大,而另一些人则拥有伟大. -- 威廉 ...

  3. Nibiru Open Day,OZO 遇见 DigiArtist 国际数字艺术展

    ChinaJoy 首日,Nibiru 带着 OZO 在上海记录了一场有气质.有内涵的艺术展. 中国国际数码互动娱乐展览会(简称:ChinaJoy)于 27 日在上海隆重举办.NibiruOpen Da ...

  4. [转]ghost手动备份及遇见的问题

    昨天才发现在网上广为流传的ghost居然是赛门铁克开发的,百度百科资料介绍硬盘分区魔法大师也是出自之手,这家公司真是了得啊! ghost自动备份那个比较简单,手动备份的教程请参考:手动备份 GHOST ...

  5. 遇见你们,真好 ---致我的舍友

    浮生一梦,落地尘埃.遇见你们,是我最美丽的意外. 一年前,因命运的机缘巧合,我们组建了这个新的宿舍.一年间,和着四季的旋律,我们嬉闹着相伴走过.一年后,伴着毕业的节奏,我们也许四散天涯.今夜无眠,写下 ...

  6. 当Elasticsearch遇见Kafka

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由michelmu发表于云+社区专栏 Elasticsearch作为当前主流的全文检索引擎,除了强大的全文检索能力和高扩展性之外,对多种 ...

  7. 计算机音乐刚好遇见你乐谱,《刚好遇见你》曲谱_刚好遇见你乐谱

    求刚好遇见你 李玉刚简谱 <刚好遇见你>简谱如下: <刚好遇见你>是由高进作词.作曲,李玉刚演唱的歌曲,收录于李玉刚2017年4月6日发行的专辑<刚好遇见你>中.2 ...

  8. Angular学习个人遇见的问题分享

    个人遇见的一些问题 写完app-heros遇见的报错 Failed to compile.src/app/app.component.html:2:1 - error NG8001: 'heroes' ...

  9. 解决phpmyadmin 遇见的问题

    解决phpmyadmin 遇见的问题 参考文章: (1)解决phpmyadmin 遇见的问题 (2)https://www.cnblogs.com/xzlive/p/9923609.html 备忘一下 ...

最新文章

  1. 从零开始单排学设计模式「UML类图」定级赛
  2. 关于 MySQL LEFT JOIN 你可能需要了解的三点
  3. 机器学习(MACHINE LEARNING)MATLAB人口增长模型logistic参数确定
  4. Python+Requests+Pytest+YAML+Allure实现接口自动化
  5. c语言线程不安全错误定位,C语言中的线程安全可破坏事件触发类#
  6. 关于mysql的教学文章_数据库课程教学方法探索论文
  7. S7-300/400 系统 Profibus DP 通讯故障诊断实用方
  8. C++析构函数为什么要为虚函数?
  9. PHP处理数据为echarts多条折线图格式
  10. LintCode_408 二进制求和
  11. 创业文档:项目启动会PPT
  12. Xcode升级之后,报 Moudule ‘xxx‘ not found,或 Could not find module ‘xxx‘ for target ‘arm64-apple-ios
  13. 对异常 java.lang.IllegalStateException: getAttribute: Session already invalidated的理解
  14. win10安装visio2010出错_Office2010安装过程中提示错误1907的三种解决方法
  15. 南洋理工大学“网络安全高级研修班”寒假访学记
  16. C - Reverse Polish Calculator
  17. C#:实现 Van Eck‘s sequence范·艾克序列算法(附完整源码)
  18. python输入一个英文句子、统计并输出单词数_C语言实现输入多行英文句子然后统计单词数和行数,如何输入?我的代码问题在哪里?...
  19. 人体组织平面波超声成像仿真(MATLAB k-Wave仿真)
  20. Response to preflight request doesn‘t pass access control check: No ‘Access-Control-Allow-Origin跨域问题

热门文章

  1. 《班扎古鲁白玛的沉默》仓央嘉措
  2. 风投坑死创业者的“六大陷阱”
  3. 钟汉良日记:万万没想到,老板第一个公众号今晚才注册!
  4. ajax技术原理及工作原理
  5. 陈天奇的机器学习编译课(免费)
  6. 计算机函数说课ppt,全国“XX杯”说课大赛计算机应用基础类优秀作品:Excel中IF函数应用说课课件...
  7. 转载:美国小学生作文:一篇让中国式教育震撼的文章
  8. 忽然出现的wsappx占用了几乎所有内存,这是我的两个半小时解决历程
  9. python shp地理坐标系转换平面坐标系-(涉及geopandas安装)
  10. 自学python vs 培训班学习