Codeforces 895C - Square Subsets
思路:状压dp。
每个数最大到70,1到70有19个质数,给这19个质数标号,与状态中的每一位对应。
状压:一个数含有这个质因子奇数个,那么他状态的这一位是1,一个数含有这个这个质因子偶数个,那么状态的这一位是0。
那么如果一个数是平方数,那么这个数的状态每一位都是0,即状态为0。
状态转移见代码。
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a)) const int N=1e5+;
const int MOD=1e9+;
int a[N];
int cnt[];
int dp[][(<<)+];
int s[];
int prime[]={,,,,,,,,,,,,,,,,,,};
int _2p[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie();
for(int i=;i<=;i++)
{
int t=i;
for(int j=;j<;j++)
{
while(t%prime[j]==)t/=prime[j],s[i]^=(<<j);
}
}
_2p[]=;
for(int i=;i<N;i++)_2p[i]=(_2p[i-]*)%MOD;
int n;
cin>>n;
for(int i=;i<=n;i++)cin>>a[i],cnt[a[i]]++;
dp[][]=;
for(int i=;i<=;i++)
{
if(!cnt[i])
{
for(int j=;j<(<<);j++)
dp[i][j]=dp[i-][j];
}
else
{
for(int j=;j<(<<);j++)
{
dp[i][j^s[i]]=((ll)dp[i][j^s[i]]+(ll)_2p[cnt[i]-]*dp[i-][j])%MOD;//从cnt[i]个数个选奇数个,C(n,1)+C(n,3)+...=2^(n-1)
dp[i][j]=((ll)dp[i][j]+(ll)_2p[cnt[i]-]*dp[i-][j])%MOD;//从cnt[i]个数个选偶数个,C(n,0)+C(n,2)*C(n,4)+...=2^(n-1)
}
}
}
cout<<(dp[][]-)%MOD<<endl;//减去0的情况
return ; }
Codeforces 895C - Square Subsets的更多相关文章
- Codeforces  895C Square Subsets(状压DP 或 异或线性基)
		
题目链接 Square Subsets 这是白书原题啊 先考虑状压DP的做法 $2$到$70$总共$19$个质数,所以考虑状态压缩. 因为数据范围是$70$,那么我们统计出$2$到$70$的每个数的 ...
 - Codeforces 895C Square Subsets:状压dp【组合数结论】
		
题目链接:http://codeforces.com/problemset/problem/895/C 题意: 给你n个数a[i].(n <= 10^5, 1 <= a[i] <= ...
 - Codeforces 895C - Square Subsets 状压DP
		
题意: 给了n个数,要求有几个子集使子集中元素的和为一个数的平方. 题解: 因为每个数都可以分解为质数的乘积,所有的数都小于70,所以在小于70的数中一共只有19个质数.可以使用状压DP,每一位上0表 ...
 - Codeforces Round #448 C. Square Subsets
		
题目链接 Codeforces Round #448 C. Square Subsets 题解 质因数 *质因数 = 平方数,问题转化成求异或方程组解的个数 求出答案就是\(2^{自由元-1}\) , ...
 - Codeforces 895.C Square Subsets
		
C. Square Subsets time limit per test 4 seconds memory limit per test 256 megabytes input standard i ...
 - Codeforces 417E Square Table(随机算法)
		
题目链接:Codeforces 417E Square Table 题目大意:给出n和m.要求给出一个矩阵,要求每一列每一行的元素的平方总和是一个平方数. 解题思路:构造.依照 a a a b a a ...
 - Codeforces 432E Square Tiling(结构体+贪婪)
		
题目连接:Codeforces 432E Square Tiling 题目大意:给出一个n∗m的矩阵,要求对该矩阵进行上色,用大写字母,可是每次上色的区域必须是正方形,不求相邻的上色区域不能有同样的颜 ...
 - CF895C: Square Subsets && 【BZOJ2844】albus就是要第一个出场
		
CF895C: Square Subsets && [BZOJ2844]albus就是要第一个出场 这两道题很类似,都是线性基的计数问题,解题的核心思想也一样. CF895C Squa ...
 - codeforces 432E Square Tiling
		
codeforces 432E Square Tiling 题意 题解 代码 #include<bits/stdc++.h> using namespace std; #define fi ...
 
随机推荐
- phper
			
0 坚持写博客,有独立的博客1 有自己的github项目,目前致力于瓦力:meolu/walle-web · GitHub,瓦尔登:meolu/walden · GitHub变得更实用,欢迎标星:)2 ...
 - Summary: Java中函数参数的传递
			
函数调用参数传递类型(java)的用法介绍. java方法中传值和传引用的问题是个基本问题,但是也有很多人一时弄不清. (一)基本数据类型:传值,方法不会改变实参的值. public class Te ...
 - Java有序数组的实现
			
package 有序数组; public class OrdArray { private long[]array; private int nElems; //初始化 public OrdArray ...
 - linux常用命令:ifconfig 命令
			
许多windows非常熟悉ipconfig命令行工具,它被用来获取网络接口配置信息并对此进行修改.Linux系统拥有一个类似的工具,也就是ifconfig(interfaces config).通常需 ...
 - 好用的firefox浏览器、geckodriver驱动的版本组合(55 和 0.19.1)
			
试过很多的firefox浏览器版本和geckodriver的组合,有时候好用,有时候不好用,现在确定了一个好用的版本组合,记录一下: firefox:版本55,而且此版本可以用firebug geck ...
 - idea生成springboot jpa的实体对象
			
在idea的database里面添加上数据库 File-->Project Structure Modules--->点击加号----->选择JPA 选择确认之后再主面板上就会出现 ...
 - strcpy、memcpy和memset的区别
			
strcpy 原型:extern char *strcpy(char *dest,char *src); 用法:#include <string.h> 功能:把src所指由NULL结束的字 ...
 - servlet之一(概念/如何写/运行/错误提示/乱码处理)
			
# 1. 什么是Servlet? sun公司制订的一种用来扩展web服务器功能的组件规范. ## (1) 扩展web服务器功能(servlet的产生背景) web服务器只能处理静态资源 ...
 - Python面试题之装饰器漫谈
			
讲 Python 装饰器前,我想先举个例子,虽有点污,但跟装饰器这个话题很贴切. 每个人都有的内裤主要功能是用来遮羞,但是到了冬天它没法为我们防风御寒,咋办?我们想到的一个办法就是把内裤改造一下,让它 ...
 - Git 基础 —— 常见使用场景
			
Git 基础学习系列 Git 基础 -- 安装 配置 别名 对象 Git 基础 -- 常用命令 Git 基础 -- 常见使用场景 Git基础 -- Github 的使用 突然插入 Bugifx 工作, ...