2734: [HNOI2012]集合选数

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 560  Solved: 321
[Submit][Status]

Description

《集合论与图论》这门课程有一道作业题,要求同学们求出{1, 2, 3, 4, 5}的所有满足以 下条件的子集:若 x 在该子集中,则 2x 和 3x 不能在该子集中。同学们不喜欢这种具有枚举性 质的题目,于是把它变成了以下问题:对于任意一个正整数 n≤100000,如何求出{1, 2,..., n} 的满足上述约束条件的子集的个数(只需输出对 1,000,000,001 取模的结果),现在这个问题就 交给你了。

Input

只有一行,其中有一个正整数 n,30%的数据满足 n≤20。

Output

仅包含一个正整数,表示{1, 2,..., n}有多少个满足上述约束条件 的子集。

Sample Input

4

Sample Output

8

【样例解释】

 
有8 个集合满足要求,分别是空集,{1},{1,4},{2},{2,3},{3},{3,4},{4}。
 
  神奇的排列组合问题,其中分成多个独立子问题,分别转化为矩阵,最有用乘法原理合并的思想可以用在很多题里面。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAXN 100010
#define MOD 1000000001
typedef long long qword;
int gcd(int x,int y)
{
return (x%y==)?y:gcd(y,x%y);
}
int pow(int x,int y)
{
int ret=;
while (y)
{
if (y&)ret*=x;
x*=x;
y>>=;
}
return ret;
}
qword pow_mod(qword x,int y)
{
qword ret=;
while(y)
{
if (y&)ret=ret*x%MOD;
x=x*x%MOD;
y>>=;
}
return ret;
}
int dp[][<<];
int ff[MAXN];
int main()
{
//freopen("input.txt","r",stdin);
int n,x,y;
scanf("%d",&n);
int i,j,k,ii;
qword ans=;
memset(ff,-,sizeof(ff));
for (i=;i<;i++)
{
if ((<<i)<MAXN)
ff[(<<i)]=i;
}
for (i=;i<MAXN;i++)
if (ff[i]==-)ff[i]=ff[i-];
for (ii=;ii<=n;ii++)
{
if (ii%== || ii%==)continue;
int l,r,mid;
l=,r=;
while (l+<r)
{
mid=(l+r)>>;
if ((qword)ii*pow(,mid)<=n)
l=mid;
else
r=mid;
}
memset(dp,,sizeof(dp));
dp[][]=;
x=ii;
for (i=;ii*(<<i>>)<=n;i++)//log(n)
{
for (j=;j<(<<r);j++)//2^(log3(n))
{
if (!dp[i-][j])continue;
for (k=;k<(<<r);k++)
{
if (j&k || (k&(k<<)))continue;
if ((qword)x*pow(,ff[k])>n)break;
dp[i][k]=(dp[i][k]+dp[i-][j])%MOD;
}
}
x*=;
}
qword res=;
for (j=;j<(<<r);j++)
{
res=(res+dp[i-][j])%MOD;
}
ans=ans*res%MOD;
}
printf("%lld\n",ans);
}
 
 

最新文章

  1. mongodb架构篇
  2. memcache+magent的高可用
  3. TF400324: Team Foundation services are not available from server…
  4. 我心中的核心组件(可插拔的AOP)~调度组件quartz.net
  5. jsp前三章测试
  6. HTTP下密码的安全传输、OAuth认证
  7. 讨论一下hibernate如何动态注册一个动态生成的实体类
  8. 表单脚本api_contenteditable
  9. ctags对部分目录生成tags
  10. EasyUI样式在IE下无法显示原因总结
  11. Secant Method (Website)
  12. Excel的 OleDb 连接串的格式(Provider=Microsoft.ACE.OLEDB)
  13. Asp.net mvc 知多少(九)
  14. vue离开页面销毁定时器
  15. day07 深浅拷贝
  16. 【JavaFx教程】第四部分:CSS 样式
  17. 第五章Web应用与应用层协议
  18. github注册流程
  19. 有关于PHP的基础知识
  20. Linux下nginx支持.htaccess文件实现伪静态的方法!

热门文章

  1. ctkPlugin插件系统实现项目插件式开发
  2. cocos2d-x plist+wen使用
  3. Ubuntu开机启动svn
  4. 在WinForm中使用委托来在其他线程中改变控件的显示
  5. 使用passenger在Centos7部署Puma+Nginx+Ruby on Rails
  6. 数据库的CRUD操作
  7. vue写请求接口--请求参数的变量要在return里面声明
  8. Universal-Image-Loader 使用步骤
  9. 如何在ASP.NET 项目中使用Silverlight页面
  10. SQL学习:主键,外键,主键表,外键表,数据库的表与表之间的关系;