B - Zhu and 772002(高斯消元解异或方程)
思路:完全平方数是指每个质因子次数均是偶数的数。现在要求n个数中选任意个使得组成得数是完全平方数,本质就是要求选的数中的每种质因子出现次数都是偶数次,而又给出最大因子是2000以内,也就是303个质因子,可以想到对每个质因子都需要满足一个异或方程(所有希望选的数对该质因子的亦或起来是0),也就是有303个方程,构造系数矩阵,用高斯消元求解。
const int N = 305,M=2000;
int Matrix[N][N];
int Free_x[N]; //自由变元
int X_Ans[N]; //解集
int Free_num = 0; //自由变元数
int Guass(int Row, int Col) //系数矩阵的行和列
{int row = 0, col = 0, max_r;for (row = 0;row < Row&&col < Col;row++, col++){max_r = row;for (int i = row + 1;i < Row;i++) //找出当前列最大值if (abs(Matrix[i][col]) > abs(Matrix[max_r][col]))max_r = i;if (Matrix[max_r][col] == 0) //记录自由变元{row--;Free_x[Free_num++] = col + 1;continue;}if (max_r != row) //交换for (int i = col;i < Col + 1;i++)swap(Matrix[row][i], Matrix[max_r][i]);for (int i = row + 1;i < Row;i++) //消元{if (Matrix[i][col] != 0){for (int j = col;j < Col + 1;j++)Matrix[i][j] ^= Matrix[row][j];}}}ll ans = quickmod(2, Col - row, mod) - 1;return ans;for (int i = row;i < Row;i++) //无解if (Matrix[i][Col] != 0)return 0;if (row < Col) //无穷多解{ll ans = quickmod(2, Col - row, mod) - 1;return ans;}//唯一解for (int i = Col - 1;i >= 0;i--){X_Ans[i] = Matrix[i][Col];for (int j = i + 1;j < Col;j++)X_Ans[i] ^= (Matrix[i][j] && X_Ans[j]);}return 1;
}
int p[M+1], cnt;
bool vis[M + 1];
void x_x()
{f(i, 2, M){if (!vis[i])p[++cnt] = i;for (int j = 1;p[j] <= M / i;j++){vis[p[j] * i] = true;if (i%p[j] == 0)break;}}
}
int main()
{//freopen("in.txt", "r", stdin);x_x();//debug(cnt);//303int cas = 0;int t = in();while (t--){//memset(Matrix, 0, sizeof Matrix);int n = in();f(i, 0, n-1){ll x;scanf("%lld", &x);f(j, 1, 303){int num = 0;while (x%p[j] == 0){num ^= 1;x /= p[j];}Matrix[j - 1][i] = num;}}ll ans=Guass(303, n);printf("Case #%d:\n%d\n", ++cas, ans);}return 0;
}
B - Zhu and 772002(高斯消元解异或方程)相关推荐
- AcWing 884. 高斯消元解异或线性方程组
题目连接 https://www.acwing.com/problem/content/886/ 思路 和浮点高斯消元类似的,步骤也是相同的,不过我们这里的运算操作变成了异或操作,对于我们枚举到的第r ...
- jzoj3823 遇见 [高斯消元解异或方程组]
Description Zyh独自一人在街上漫步.Zyh相信不久后应该就可以和她一起漫步,可是去哪里寻找那个她呢?Zyh相信每个人都有一个爱情的号码牌,这个号码牌是一个n*n的矩阵. 每个人都要在矩阵 ...
- HDU 3364 Lanterns 高斯消元(水 异或方程
题目链接:点击打开链接 题意: 给定n盏灯,m个开关 下面m行给出每个开关可以控制哪些灯(即按下此开关,这些灯的状态会改变) 下面q个询问:一行一个询问,一个询问n个数字表示灯的最终状态 问从全暗到这 ...
- 【BZOJ1923】外星千足虫,高斯消元解xor方程组
Time:2016.08.29 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 原本以为是高斯消元解取模方程,后来发现这题意不就和异或方程一样吗 [异或(XOR)运算由于与" ...
- 第三十四章 数论——高斯消元解线性方程组
第三十四章 数论--高斯消元解线性方程组 一.高斯消元 1.线性方程组 2.高斯消元步骤 (1)数学知识铺垫 增广矩阵和阶梯矩阵 初等变换 (2)高斯消元步骤 二.代码模板 1.问题: 2.代码 一. ...
- HDU 4305 Lightning (高斯消元解kirchhoff矩阵+逆元)
题意是:给一些坐标点,如果两点之间的距离小于R,并且两点之间没有其他点,则这两个点保持连通,这样构成了一个图.问这个图中生成树的个数. 因为数据量并不大,O(N^3)的建图没有问题. 建好图以后就可以 ...
- [AcWing]883. 高斯消元解线性方程组(C++实现)高斯消元解线性方程组模板题
[AcWing]883. 高斯消元解线性方程组(C++实现)高斯消元解线性方程组模板题 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算 ...
- 高斯消元 AcWing 883. 高斯消元解线性方程组
高斯消元 AcWing 883. 高斯消元解线性方程组 原题链接 AcWing 883. 高斯消元解线性方程组 算法标签 线性代数 高斯消元 思路 代码 #include<bits/stdc++ ...
- POJ 2947 Widget Factory (高斯消元解同余方程组)
题意:N种物品,M条记录,接写来M行,每行有K,str1,str2,表示第i个记录从星期str1到星期str2,做了K件物品,接下来的K个数为物品的编号.求做每个物品所需的时间,并且最后结果在3-9之 ...
- 高斯消元解线性方程组(浮点高斯消元模板)
题目连接 https://www.acwing.com/problem/content/885/ 思路 高斯消元的思路如下: 1.我们从上到下,从左到右开始消元,对于每一行我们只保留当前[i,i]行的 ...
最新文章
- window下Nodejs的部署
- mongodb--GridFS
- ASP.NET Core 认证与授权[5]:初识授权
- jquery-加入购物车动画
- jQuery初识 - jQuery中的方法
- Java服务端向客户端写文件_java实现客户端向服务器发送文件
- win7下如何建立ftp服务器
- Welcome to NHibernate
- CF321E Ciel and Gondolas BZOJ 5311 贞鱼
- opkg-utils的PKGBUILD文件,参考自OE的opkg-utils_git.bb
- 广联达报错access_广联达土建算量软件错误提示大全及解决方法(持续更新至20170418)...
- 召唤神龙Ladon强化Cobalt Strike
- 复杂美科技有限公司区块链专利
- 【Lua杂谈】debug.getinfo源码分析——使用C API重写lfunctimer
- Python数据可视化第 8 讲:matplotlib饼图绘制函数pie
- 通过源码简要分析之Android消息机制Handler、Looper、MessageQueue运行机制
- 解决第三方网页在微信浏览器中点击图片会自动放大
- 我的linux学习笔记
- 王兴的无限游戏和美团的三维文明世界|一点财经
- c语言 星座运势,第十一周 OJ总结-日期妙算星座