https://vjudge.net/problem/UVA-11542

xor高斯消元。。。

答案为2^f-1

其实书上有一个问题

样例有3种情况,其中4,6,15是绑在一起的,也就是他们必须满足一定的选或不选的关系。当一个变量是自由的,当且仅当他的所有的幂%2==0,也就是说这个数是一个完全平方数,否则这个数的选择肯定会影响到其他数。

那么我们可以吧所有数分为有界变量和自由变量,就是确定选或不选和可选可不选,确定选或不选看做一个大的元素,因为他们选或不选组成的集合也是一个完全平方数,也就是一个自由变量。那么我们得答案就是1<<(自由变量+1)-1 ,-1是空集。+1是有界变量的组合体。

书上的样例解释应该是错的,自由变量只有x1,而为什么程序能对大概是因为下标是从0开始,正好规避了那个加一,不知道对不对,求打脸。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = ;
int n, lim;
int a[N][N], p[N], mark[N];
void Init()
{
for(int i = ; i <= ; ++i)
{
if(!mark[i]) p[++p[]] = i;
for(int j = ; j <= p[] && i * p[j] <= ; ++j)
{
mark[i * p[j]] = ;
if(i % p[j] == ) break;
}
}
}
int gauss_jordan(int lim)
{
int row = , col = ; //col 列
for(; row <= lim && col <= n; ++col)
{
int x = ;
for(int i = row; i <= lim; ++i) if(a[i][col] == ) { x = i; break; }
if(!x) continue;
for(int i = ; i <= n + ; ++i) swap(a[row][i], a[x][i]);
for(int i = ; i <= lim; ++i) if(a[i][col] && i != row)
for(int j = ; j <= n + ; ++j) a[i][j] ^= a[row][j];
++row;
}
return row;
}
int main()
{
Init();
int T; scanf("%d", &T);
while(T--)
{
lim = ;
memset(a, , sizeof(a));
scanf("%d", &n);
for(int i = ; i <= n; ++i)
{
ll x; scanf("%lld", &x);
for(int j = ; j <= p[]; ++j)
{
if(p[j] > x) break;
lim = max(lim, j);
while(x % p[j] == ) { x /= p[j]; a[j][i] ^= ; }
}
}
int x = gauss_jordan(lim) - ;
printf("%lld\n", (1ll << (ll)(n - x)) - );
}
return ;
}

uva11542的更多相关文章

  1. UVA11542 Square(高斯消元 异或方程组)

    建立方程组消元,结果为2 ^(自由变元的个数) - 1 采用高斯消元求矩阵的秩 方法一: #include<cstdio> #include<iostream> #includ ...

  2. UVa11542 Square

    /*by SilverN*/ #include<iostream> #include<algorithm> #include<cstring> #include&l ...

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

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

随机推荐

  1. Python之购物车

    Python之购物车 msg_list = [ ['iphone',8888], ['coffe',38], ['book',90], ['Tesla',100000], ['RR',10000000 ...

  2. Matlab学习笔记(二)

    二.MATLAB基础知识 (二)数值.变量和表达式 命名规则: 变量名对大小写敏感,即区分大小写 变量名必须以字母开头,后面可以采用数字.下划线和字母,但不能使用空格.标点符号和运算符 变量名最长可以 ...

  3. Quartz --quartz.properties

    quartz.properties 如果项目中没有该配置文件,则会去jar包中读取自带配置文件 默认的配置如下 # Default Properties file for use by StdSche ...

  4. 4_蒙特卡罗算法求圆周率PI

    题目 蒙特卡罗算法的典型应用之一为求圆周率PI问题. 思想: 一个半径r=1的圆,其面积为:S=PI∗r2=PI/4 一个边长r=1的正方形,其面积为:S=r2=1 那么建立一个坐标系,如果均匀的向正 ...

  5. SSL 握手协议详解

    这里重点介绍一下服务端的验证和密钥交换.这个阶段的前面的(a)证书 和(b)服务器密钥交换是基于密钥交换方法的.而在SSL中密钥交换算法有6种:无效(没有密钥交换).RSA.匿名Diffie-Hell ...

  6. NYOJ-768移位密码,最简单的代替密码;

    移位密码 时间限制:1000 ms  |  内存限制:65535 KB 难度:0 ->   Link   <- 还有1个半小时考信息安全导论,昨晚心血来潮在oj上看到这几个题,简直就是水啊 ...

  7. MYSQL Sorting result 把队列堆满了,该怎么办?

    show processlist;发现有200多个队列,select cardnum from table where xxxid = 31 order by abc_time desc 这样的一个排 ...

  8. [luoguP2885] [USACO07NOV]电话线Telephone Wire(DP + 贪心)

    传送门 真是诡异. 首先 O(n * 100 * 100) 三重循环 f[i][j] 表示到第 i 个柱子,高度是 j 的最小花费 f[i][j] = min(f[i - 1][k] + abs(k ...

  9. PHP_pear的安装和使用

    --------------            安装pear -------------- pear是PHP的扩展和应用程序库,包含了很多有用的类,安装好php5.0后,pear实际上并没有被安装 ...

  10. B - Euler theorem 数学

    直接打表找规律 HazelFan is given two positive integers a,ba,b, and he wants to calculate amodbamodb. But no ...