题意:给你一个数列,然后找任意数量的数字(除了空集),使得他们的乘机为一个数的平方

我们发现元素最大70,所以我们可以从这里入手,平方数有个性质就是它的所有质因子的指数为偶数

比如:36 = 2*2*3*3;然后我们可以写一个状态压缩dp,第一维表示小于等于第一维的所有数字,第二

维表示到达的状态,那最终的结果就是dp[70][0],dp[i]和dp[i-1]的区别就是,你有没有取到i这个数字,你会发现,

如果你取偶数个i的话,对于状态是不影响的,因为偶数个异或就是零,奇数个的话就是它的本身,里面还有一个性质,

就是C(n,0)+C(n,2) + ... = C(n,1)+C(n,3)+ ...,你可以取a=1,b=-1就很好证明,还有因为它们的和就是

2的n次方,参考https://zhidao.baidu.com/question/2268538776712429868.html(来自百度),所以无论取奇数个还是偶数,都有

2的n-1次方种,所以转移方程为if(cnt【i】) dp【i】【j】= (dp【i-1】【j】+ dp【i-1】【s【i】^ j】)*m【cnt【i】-1】;else dp【i】【j】 =dp【i-1】【j】;(还没加入取模运算)

下面直接看代码:

#include<bits/stdc++.h>
#define de(x) cout<<#x<<"="<<x<<endl;
#define dd(x) cout<<#x<<"="<<x<<" ";
#define rep(i,a,b) for(int i=a;i<(b);++i)
#define repd(i,a,b) for(int i=a;i>=(b);--i)
#define mt(a,b) memset(a,b,sizeof(a))
#define fi first
#define se second
#define inf 0x7f
#define pii pair<int,int>
#define pdd pair<double,double>
#define pdi pair<double,int>
#define mp(u,v) make_pair(u,v)
#define sz(a) a.size()
#define ull unsigned long long
#define ll long long
#define pb push_back
#define PI acos(-1.0)
const int mod = 1e9+;
const int maxn = 1e5+;
const double EPS = 1e-;
using namespace std;
int gcd(int a,int b){
return b==?a:gcd(b,a%b);
}
int a[maxn];
int s[maxn];
int prime[maxn];
ll m[maxn];
int dp[][<<];
int cnt[];
bool is_prime(int x){
for(int i=;i*i<=x;++i) if(x%i==) return false;
return true;
}
void init(){
mt(cnt,);
int cntt = ;
rep(i,,){
if(is_prime(i)) prime[cntt++] = i;
}
m[] = ;
rep(i,,maxn) m[i] = (m[i-]*)%mod;
rep(i,,){
int t = i;
rep(j,,){
while(t&&t%prime[j]==){
t/=prime[j];
s[i] = s[i]^(<<j);
}
}
}
}
int main()
{
init();
int n;
scanf("%d",&n);
rep(i,,n){
scanf("%d",&a[i]);
cnt[a[i]]++;
}
dp[][] = ;
rep(i,,){
rep(j,,(<<)){
if(cnt[i]){
dp[i][j] = ((dp[i-][j] + dp[i-][j^s[i]]) %mod) * m[cnt[i]-]%mod;
}else dp[i][j] = dp[i-][j];
}
}
cout<<((dp[][]-+mod)%mod)<<endl;
return ;
}

最新文章

  1. 制作wordpress留言板
  2. java异常——RuntimeException和User Define Exception
  3. 一个强大的LogParser的UI工具--logparserlizard简介
  4. git在windows常用命令
  5. Java TCP服务端向客户端发送图片
  6. 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context}
  7. CentOS添加字体
  8. chmod 与大写 X
  9. Android OkHttp文件上传与下载的进度监听扩展
  10. PostgreSQL对汉字按拼音排序
  11. SpringBoot 动态切换多数据源
  12. “&lt;textarea&gt;”内的文字对齐
  13. jvm理论-字节码指令
  14. 解决Windows 10 1803 April 2018 Updatete不能网络共享的问题
  15. RNA提取和建库流程对mRNA-Seq的影响
  16. Web Scraping with Python
  17. C# try catch finally简单介绍和应用
  18. java转义字符处理——“\\”替换为“/”
  19. Ajax技术剖析
  20. 基于jquery下拉列表树插件代码

热门文章

  1. bzoj1025 [SCOI2009]游戏 动态规划
  2. grep常用命令讲解
  3. 20180929 北京大学 人工智能实践:Tensorflow笔记07
  4. 个人学习源码的 HBase误区的总结 与 架构图
  5. ArcGIS api for javascript——地理处理任务-计算一个可视域
  6. 会变得ActionBar,让你的ActionBar与众不同
  7. 三段式状态机 [CPLD/FPGA]
  8. 计算文件大小(C/C++语言)
  9. SQL调用Webservices
  10. Weka中数据挖掘与机器学习系列之Weka简介(二)