uva11542
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的更多相关文章
- UVA11542 Square(高斯消元 异或方程组)
建立方程组消元,结果为2 ^(自由变元的个数) - 1 采用高斯消元求矩阵的秩 方法一: #include<cstdio> #include<iostream> #includ ...
- UVa11542 Square
/*by SilverN*/ #include<iostream> #include<algorithm> #include<cstring> #include&l ...
- HDU 5833 Zhu and 772002 (高斯消元)
Zhu and 772002 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5833 Description Zhu and 772002 are b ...
随机推荐
- 18Spring后置通知
Spring后置通知,和前置通知类似,直接看代码: package com.cn.spring.aop.impl; //加减乘除的接口类 public interface ArithmeticCalc ...
- Python之爬虫-猫眼电影
Python之爬虫-猫眼电影 #!/usr/bin/env python # coding: utf-8 import json import requests import re import ti ...
- 分数拆分(刘汝佳紫书P183)
枚举,由已知条件推得y大于k,小于等于2K AC代码: #include"iostream"#include"cstring"using namespace s ...
- //……关于TCP三次握手与四次挥手
TCP的概述 TCP把连接作为最基本的对象,每一条TCP连接都有两个端点,这种断点我们叫作套接字(socket),它的定义为端口号拼接到IP地址即构成了套接字,例如,若IP地址为192.3.4.16 ...
- angular2集成highchart
集成highchart的配置困扰了我很久,今天终于解决了: 1.修改tsconfig.app.json: "compilerOptions": { //... "type ...
- HDU 2475 Box
Box Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 247564 ...
- 2015 湘潭大学程序设计比赛(Internet)部分题解,其中有一个题与NYOJ1057很像,贪心过~~
仙剑奇侠传 祝玩的开心 ...
- HTML Imports & polyfill
组件化浏览器的兼容性问题汇总 框架依赖的 Web 标准技术 优先级高 HTML Imports HTML tempaltes ES6 to ES5 (搭建模块开发环境) polyfill https: ...
- hdu 1698区间延迟更新
#include<stdio.h> #define N 100100 struct node { int x,y,yanchi; }a[N*4];//注意数组范围 void build(i ...
- bzoj3545 Peaks 线段树合并
离线乱搞... 也就是一个线段树合并没什么 #include<algorithm> #include<iostream> #include<cstring> #in ...