今日题解------codeforces 895C
题意:给你一个数列,然后找任意数量的数字(除了空集),使得他们的乘机为一个数的平方
我们发现元素最大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 ;
}
今日题解------codeforces 895C的更多相关文章
- 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 #549 (Div. 2) B. Nirvana
Codeforces Round #549 (Div. 2) B. Nirvana [题目描述] B. Nirvana time limit per test1 second memory limit ...
- 题解——CodeForces 438D The Child and Sequence
题面 D. The Child and Sequence time limit per test 4 seconds memory limit per test 256 megabytes input ...
- Codeforces 895C - Square Subsets
895C - Square Subsets 思路:状压dp. 每个数最大到70,1到70有19个质数,给这19个质数标号,与状态中的每一位对应. 状压:一个数含有这个质因子奇数个,那么他状态的这一位是 ...
- 今日题解------codeforce 893d
题意:给你一个数列,小于零表示表示信用卡里取出钱,大于零表示信用卡里存钱,等于零表示要查询信用卡, 如果被查到信用卡里的钱小于零,那你就GG,或者在任何时候你的信用卡里的钱大于d的话(不需要找ai等于 ...
- [题解][Codeforces]Good Bye 2019 简要题解
构造题好评,虽然这把崩了 原题解 A 题意 二人游戏,一个人有 \(k_1\) 张牌,另一个人 \(k_2\) 张,满足 \(2\le k_1+k_2=n\le 100\),每张牌上有一个数,保证所有 ...
- [题解][Codeforces]Codeforces Round #602 (Div. 1) 简要题解
orz djq_cpp lgm A 题意 给定一个分别含有 \(\frac n2\) 个左括号和右括号的括号序列 每次可以将序列的一个区间翻转 求一个不超过 \(n\) 次的操作方案,使得操作完之后的 ...
- [题解]Codeforces Round #709 (Div. 1, based on Technocup 2021 Final Round) - A. Basic Diplomacy
[题目] A. Basic Diplomacy [描述] Aleksey有n个朋友,有一个m天的假期,每天都需要一个朋友来陪他.给出每天有空的朋友的编号,要求同一个朋友来的天数不能超过m/2上取整.求 ...
随机推荐
- 在angular4.X里使用mCustomScrollbar滚动条插件
参考网上的方法https://stackoverflow.com/questions/36755625/how-to-import-jquery-and-mcustomscrollbar-plugin ...
- Vuex-一个专为 Vue.js 应用程序开发的状态管理模式
为什么会出现Vuex 非父子关系的组件如何进行通信?(Event Bus)bus.js import Vue from 'vue'; export default new Vue(); foo.vue ...
- Unity Shader (一)ShaderLab 语法
一.什么是Shader Shader(着色器):是可以在GPU上运行的一段程序,通过Shader可以进行一些渲染相关的设置. 二.什么是ShaderLab 目前面向GPU的编程有三种高级图像语言:HL ...
- Java基础学习总结(10)——static关键字
一.static关键字 原来一个类里面的成员变量,每new一个对象,这个对象就有一份自己的成员变量,因为这些成员变量都不是静态成员变量.对于static成员变量来说,这个成员变量只有一份,而且这一份是 ...
- C# Winform利用POST传值方式模拟表单提交数据(Winform与网页交互)
其原理是,利用winfrom模拟表单提交数据.将要提交的參数提交给网页,网页运行代码.得到数据.然后Winform程序将网页的全部源码读取下来.这样就达到windows应用程序和web应用程序之间传參 ...
- 特定位取反(js实现)
去华为面试的时候.没有做好准备工作.面试的流程没有问清也没有查,结果一过去就让上机做题,着实有点措手不及.笔者是擅长前端的Java Webproject师啊,主要的底层编程知识早已生疏了.机试题碰到了 ...
- 优化数据页面(20)——1:n的数据关系
设计要点:优化数据页面.界面设计.美化exce 阿金:那一对多的关系-- 秀秀:不是:n结构么? 阿金:嗯,这俺知道.俺特别喜欢这样的格式,那样显得非常上档次! 秀秀:俺也喜欢. 由于页面上有空白,认 ...
- 25.Detours劫持技术
Detours可以用来实现劫持,他是微软亚洲研究院开发出来的工具,要实现它首先需要安装Detours. 安装地址链接:https://pan.baidu.com/s/1eTolVZs 密码:uy8x ...
- 初学Larevel 2014-08-21 11:24 90人阅读 评论(0) 收藏
添加第一个路由时就遇到了 404错误,查了一下说要这样才能 版权声明:本文为博主原创文章,未经博主允许不得转载.
- Lambda表达式详细总结
(一)输入参数 在Lambda表达式中,输入参数是Lambda运算符的左边部分.它包含参数的数量可以为0.1或者多个.只有当输入参数为1时,Lambda表达式左边的一对小括弧才可以省略.输入参数的数量 ...