895C
来源:互联网 发布:2016电脑点歌软件 编辑:程序博客网 时间:2024/06/11 03:36
div2从没这么接近过rk100以内的水平。。
想到了奇偶性质模二的素因子表,想到了dp第一维逐渐添加数字,第二维枚举1<<19大约1e6来更新集合
奈何第一维默认了是1-n,算下来复杂度1e10从而卡手做不下去
没完整做出来挺遗憾的吧
#include<bits/stdc++.h> //#pragma comment(linker, "/STACK:1024000000,1024000000") #include<stdio.h> #include<algorithm> #include<queue> #include<string.h> #include<iostream> #include<math.h> #include<set> #include<map> #include<vector> #include<iomanip> using namespace std; #define ll long long #define pb push_back #define FOR(a) for(int i=1;i<=a;i++) #define sqr(a) (a)*(a)const int inf=0x3f3f3f3f;const int maxn=1e5+5;const int mod=1e9+7;int dp[75][(1<<19)+5];//前i个数字,生成集合j的加法const int prime[19]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67};int base2[maxn];int cnt[75];//数字i出现次数int s[75];//数字i的因子模2表示int main(){for(int i=1;i<=70;i++){int t=i;for(int j=0;j<19;j++){while(t%prime[j]==0)t/=prime[j],s[i]^=(1<<j);}}base2[0]=1;for(int i=1;i<maxn;i++)base2[i]=(base2[i-1]*2%mod);int n;scanf("%d",&n);for(int i=1,x;i<=n;i++){scanf("%d",&x);cnt[x]++;}dp[0][0]=1;for(int i=1;i<=70;i++){if(!cnt[i]){for(int j=0;j<(1<<19);j++)dp[i][j]=dp[i-1][j];}else{for(int j=0;j<(1<<19);j++){dp[i][j^s[i]]=(1ll*dp[i][j^s[i]]+1ll*base2[cnt[i]-1]*dp[i-1][j])%mod;dp[i][j]=(1ll*dp[i][j]+1ll*base2[cnt[i]-1]*dp[i-1][j])%mod;}}}printf("%d\n",(dp[70][0]+mod-1)%mod);}
阅读全文
0 0
- 895C
- 895C
- Codeforces 895C(状压)
- Codeforces 895C
- codeforces 895C
- c
- c
- c
- c
- C
- c
- c
- c
- C+
- c
- C
- c
- c
- 任务计划 crontab
- Unix:signal调用类成员函数 / Linux:signal调用类成员函数
- 服务管理工具 chkconfig
- systemd 服务管理
- Java笔记13
- 895C
- Java笔记14
- 循环列子 将一个整数各个位数倒序输出
- 2017-12-9 CSDN第一天小记
- ss命令
- 微积分的实质?袁萌评知乎的谬论
- JSP自定义标签入门1.0
- web app 无限加载终极解决方案
- c#--Entity Framework概述