题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5833

题意:给n个数,选择一些数字乘积为平方数的选择方案数。

分析:每一个数字分解质因数。比如4, 6, 10, 15,, 令

表示选择第i个数字,那么,如果p是平方数,那么每个质因数上的指数为偶数,x1系数为2已经是偶数不考虑。可以转换为异或为0判断偶数,即奇数置为1,偶数置为0,然后n个数字m个质因数的增广矩阵消元看有几个自由变量(取0或1无所谓),答案是2^r - 1(全部都不取方案不算)

线性方程组的自由变量个数了(即方程个数 - 增广矩阵的秩)。 

比如:n=2个数  8 =2^3 、 9 = 3^2

有两个素因子2和3,可列出两个方程:

3*X1 + 0*X2 = 0 (mod2)                     等价于 :                        X1 +0*X2 = 0 

0*X1 + 2*X2 = 0 (mod2)                                                            0*X1 + 0*X2 = 0

其中只有1个有效方程,即秩为1。

这代表什么意思呢? X1 = 0 , 表示8一定不能选 , X2不确定,表示9可以选择也可以不选。

因此答案为 2^1 - 1  = 1   (因为不允许一个都不选,所以减一)

网选原题的并不只这一题,没做过的只能默默吃亏了;

相对应的UVA的11542:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2537同时也是大白书上的例题;

#include<iostream>
#include<algorithm>
#include<string.h>
#include<stdio.h>
using namespace std;
#define N 2000
#define met(a, b) memset(a, b, sizeof(a))
#define mod 1000000007
typedef long long LL; int f[N*], p[N*], Matrix[N][N]; int Prime()
{
int cnt = ;
for(int i=; i<N; i++)
{
if(!p[i])f[cnt++] = i;
for(int j=i; j<N; j+=i)
p[j] = ;
}
return cnt;
} int gauss(int m, int n)
{
int i = , j = ;
while(i<m && j<n)
{
int row = i;
for(int k=i+; k<m; k++)
{
if(Matrix[k][j])
{
row = k;
break;
}
}
if(Matrix[row][j])
{
if(row != i)
{
for(int k=; k<=n; k++)
swap(Matrix[i][k], Matrix[row][k]);
}
for(int p=i+; p<m; p++)
{
if(Matrix[p][j])
{
for(int q=i; q<=n; q++)
Matrix[p][q] ^= Matrix[i][q];
}
}
i++;
}
j++;
}
return i;
} int main()
{
int PrimeNum = Prime(); int n, T, t = ; scanf("%d", &T);
while(T--)
{
met(Matrix, );
scanf("%d", &n);
int m = ;
for(int i=; i<n; i++)
{
LL num;
scanf("%I64d", &num);
for(int j=; j<PrimeNum; j++)
{
if(num%f[j] == )
{
m = max(m, j);
while(num%f[j] == )
{
num/=f[j];
Matrix[j][i] ^= ;
}
}
}
}
int ret = gauss(m+, n); LL ans = ;
for(int i=; i<=n-ret; i++)
{
ans = ans*%mod;
}
ans = (ans+mod-) % mod;
printf("Case #%d:\n%I64d\n", t++, ans);
}
return ;
}

Zhu and 772002---hdu5833(高斯消元解求异或方程组)的更多相关文章

  1. bzoj千题计划187:bzoj1770: [Usaco2009 Nov]lights 燈 (高斯消元解异或方程组+枚举自由元)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1770 a[i][j] 表示i对j有影响 高斯消元解异或方程组 然后dfs枚举自由元确定最优解 #in ...

  2. 【BZOJ】2466: [中山市选2009]树 高斯消元解异或方程组

    [题意]给定一棵树的灯,按一次x改变与x距离<=1的点的状态,求全0到全1的最少次数.n<=100. [算法]高斯消元解异或方程组 [题解]设f[i]=0/1表示是否按第i个点的按钮,根据 ...

  3. HDU 5833 Zhu and 772002 (高斯消元)

    Zhu and 772002 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5833 Description Zhu and 772002 are b ...

  4. HDU 5833 (2016大学生网络预选赛) Zhu and 772002(高斯消元求齐次方程的秩)

    网络预选赛的题目……比赛的时候没有做上,确实是没啥思路,只知道肯定是整数分解,然后乘起来素数的幂肯定是偶数,然后就不知道该怎么办了… 最后题目要求输出方案数,首先根据题目应该能写出如下齐次方程(从别人 ...

  5. poj2947(高斯消元解同模方程组)

    题目链接:http://poj.org/problem?id=2947 题意:有n 种装饰物,m 个已知条件,每个已知条件的描述如下: p start enda1, a2......ap (1< ...

  6. POJ 1222 EXTENDED LIGHTS OUT(高斯消元解异或方程组)

    EXTENDED LIGHTS OUT Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 10835   Accepted: 6 ...

  7. HDU 5833 Zhu and 772002 (数论+高斯消元)

    题目链接 题意:给定n个数,这n个数的素因子值不超过2000,从中取任意个数使其乘积为完全平方数,问有多少种取法. 题解:开始用素筛枚举写了半天TLE了,后来队友说高斯消元才想起来,果断用模板.赛后又 ...

  8. HDU 5833 Zhu and 772002(高斯消元)

    题意:给n个数,从n个数中抽取x(x>=1)个数,这x个数相乘为完全平方数,求一共有多少种取法,结果模1000000007. 思路:每个数可以拆成素数相乘的形式,例如: x1 2=2^1 * 3 ...

  9. [置顶] hdu 4418 高斯消元解方程求期望

    题意:  一个人在一条线段来回走(遇到线段端点就转变方向),现在他从起点出发,并有一个初始方向, 每次都可以走1, 2, 3 ..... m步,都有对应着一个概率.问你他走到终点的概率 思路: 方向问 ...

随机推荐

  1. adc转换原理

    模数转换器即A/D转换器,或简称ADC,通常是指一个将模拟信号转变为数字信号的电子元件.通常的模数转换器是将一个输入电压信号转换为一个输出的数字信号.由于数字信号本身不具有实际意义,仅仅表示一个相对大 ...

  2. openldap slapd.conf参数

    已安装系统的 /etc/openldap/slapd.conf 中包含 LDAP 服务器的完整配置文件.在此简述了其中的各个项并说明了必要的调整.以符号 (#) 为前缀的项处于非活动状态.必须取消这个 ...

  3. JS-过滤敏感词【RegExp】

    来自腾讯课堂笔记:https://ke.qq.com/webcourse/index.html#course_id=152997&term_id=100174752&taid=8010 ...

  4. 【前端开发】 JS面试题整理

    1.截取字符串abcdace的acealert('abcdace'.substring(4)); 2.规避javascript多人开发函数重名问题命名空间封闭空间js模块化mvc(数据层.表现层.控制 ...

  5. Delphi Code Editor 之 基本操作

    Delphi Code Editor 之 基本操作 毫无疑问,Delphi是高度可视化的.这是使用Delphi进行编程的最大好处之一.当然,任何一个有用的程序中都有大量手工编写的代码.当读者开始编写应 ...

  6. Qt编写的RTSP播放器+视频监控(ffmpeg版本)

    记得四年前就写了个简易版本的,当时写得非常粗糙,代码实在惨不忍睹,时隔多年后,重新写了个版本,同时还解决了以前不支持6画面8画面切换等异形布局的问题.1:可以用过目录下的rtsp.txt设置要显示的视 ...

  7. Android Studio项目提交(或更新)到github的方法

    一 配置github登陆信息 二 上传工程到github 1. 2. 点击Share按钮 3. 点击ok按钮 状态栏提示: 4. 点击 No 按钮 5.AS右下脚弹出提示框 查看github网站,已经 ...

  8. 开发常见错误之 : Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar

    SLF4J: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackO ...

  9. [转]OpenStack Neutron运行机制解析概要

    转载自:http://panpei.net.cn/2013/12/04/openstack-neutron-mechanism-introduce/ 自从开学以来,玩OpenStack也已经3个月了, ...

  10. zabbix-proxy配置

    1,proxy配置 # cat /etc/zabbix/zabbix_proxy.conf Server=192.168.1.1 Hostname=proxy.com LogFile=/tmp/zab ...