【UVA11542】Square(高斯消元)
来源:互联网 发布:tensorflow ocr 编辑:程序博客网 时间:2024/05/21 07:13
题目大意:n个数,选几个数相乘,使积为平方数,求方案数。
题解:
给每个数分解质因数,用质因数的指数mod 2作为未知数,每个数中包含该质因数的指数mod 2作为参数,列方程。(因为目的是为了每个质因数指数mod 2为0)
#include<cstdio>#include<cstring>#include<algorithm>using std::swap;long long N,prime[100],pri_cnt;bool isprime[505];long long x_cnt,pr_id[505];typedef bool Matrix[105][105];Matrix A;void getPrime(){ for(long long i=2;i<=500;i++) if(!isprime[i]) { prime[pri_cnt++]=i; for(long long j=i*i;j<=500;j+=i) isprime[j]=1; }}void Init(){ x_cnt=0; memset(pr_id,0,sizeof pr_id); memset(A,0,sizeof A); long long a; scanf("%lld",&N); for(long long i=1,k;i<=N;i++) { scanf("%lld",&a); k=0; while((a>500||isprime[a])&&a!=1) { if(a%prime[k]==0&&pr_id[prime[k]]==0) pr_id[prime[k]]=++x_cnt; while(a%prime[k]==0) { a/=prime[k]; A[pr_id[prime[k]]][i]^=1; } k++; } if(a!=1) { if(pr_id[a]==0) pr_id[a]=++x_cnt; A[pr_id[a]][i]^=1; } }}void Gauss(){ long long r,c,n=x_cnt,m=N,mxr; for(r=1,c=1;r<=n&&c<=m;r++,c++) { for(mxr=r;!A[mxr][c]&&mxr<=n;mxr++); if(mxr>n){r--;continue;} if(mxr!=r)swap(A[mxr],A[r]); for(long long i=1;i<=n;i++) if(i!=r&&A[i][c]) for(long long j=1;j<=m;j++) A[i][j]^=A[r][j]; } long long ans=1LL<<(m-r+1); ans--; printf("%lld\n",ans);}int main(){ long long T; scanf("%lld",&T); getPrime(); while(T--) { Init(); Gauss(); } return 0;}
1 2
- 【UVA11542】Square(高斯消元)
- [UVA11542] Square 高斯消元
- uva11542 Square
- uva11542 Square
- uva11542 Square(异或方程组)
- uva11542(高斯消元)
- 【高斯消元】UVA11542
- UVa11542
- UVA 11542 - Square(高斯消元)
- 高斯消元(Square,UVA 11542)
- Square Numbers(Square Numbers)
- uva 11542 Square(数学:高斯消元)
- Uva11542 求矩阵的秩
- uva 11542 - Square(高斯消元)
- uva 11542 Square (高斯消元)
- Square(DFS)
- Square(DFS)
- HDU1518 Square (DFS)
- React 入门实例教程
- mysql性能优化-配置参数优化
- java学习笔记-excel表格形式记录
- 机器学习算法比较
- Redis 应用案例 - 在问题中不断成长
- 【UVA11542】Square(高斯消元)
- 创业案例:如何调整股权,才不伤害合伙人感情?
- APM 应用性能管理
- 逻辑运算与按位运算
- 常用WiFi芯片
- 【设计模式】工厂模式
- 利用Gson进行String和对象的转换
- laravel5.2 分页
- 基于JQuery的超简单轮播图