【题意分析】

  定义一个等价类为满足如下条件的一个极大的集合Q:∀t∈Q,k∈N+,若tk∈全集R,都成立tk∈Q。

  给定n,记[1,n]∩N上所有排列置换的全集为R。求对于所有的等价类Q,card({x|x=card(Q),Q∈R})。

【解题思路】

  很明显,一个排列置换能分解成一个或几个不相交的置换环,其所在等价类的元素个数即为所有置换环长度的最小公倍数。

  显然,若一个置换所有置换环长度的最大公约数大于1,则一定有一个置换环长度的最大公约数等于1的所在等价类元素个数与之相同。

  所以,我们只要统计只有互质且不等于1的长度的置换环的置换所在等价类元素个数即可。

  这样问题就可以转化为如何拆分n使所有拆分出的数都是pk(p为互不相等的质数,k∈[1,+∞)∩N)。

  先筛出[1,n]∩N范围内所有质数,然后DP,f[i][j]表示已经选到了第i个质数,可分配的长度还剩下j的剩余时的拆分数。

  转移方程:f[i][j]=f[i-1][j]+Σf[i-1][j+p[i]k],时间复杂度O(nπ(n))。

【参考代码】

 #pragma GCC optimize(2)
#pragma comment(linker,"/STACK:1024000000,1024000000")
#include <cstdio>
#include <cstring>
#define REP(i,low,high) for(register int i=(low);i<=(high);++i)
using namespace std; static int n,cnt=; long long f[][]; bool isprime[]; int prime[]; long long DFS(const int &now,const int &rest)
{
if(now>cnt) return ; if(~f[now][rest]) return f[now][rest];
f[now][rest]=DFS(now+,rest);
for(register int i=prime[now];i<=rest;i*=prime[now])
{
f[now][rest]+=DFS(now+,rest-i);
}
return f[now][rest];
} int main()
{
scanf("%d",&n),memset(isprime,,sizeof isprime),memset(f,-,sizeof f);
REP(i,,n) if(isprime[i]) {REP(j,,n/i) isprime[i*j]=; prime[++cnt]=i;}
return printf("%lld\n",DFS(,n)),;
}

bzoj1025题解的更多相关文章

  1. BZOJ1025 [SCOI2009]游戏 【置换群 + 背包dp】

    题目链接 BZOJ1025 题解 题意就是问一个\(1....n\)的排列在同一个置换不断重复下回到\(1...n\)可能需要的次数的个数 和置换群也没太大关系 我们只需知道同一个置换不断重复,实际上 ...

  2. 【bzoj1025】游戏

    [bzoj1025]游戏 题意 windy学会了一种游戏.对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应.最开始windy把数字按顺序1,2,3,--,N写一排在纸上.然后再在这一排下面写 ...

  3. [SCOI2009][bzoj1025]游戏

    [SCOI2009][bzoj1025]游戏 标签: DP 置换 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1025 题解 很套路的题目 ...

  4. 【BZOJ1025】[SCOI2009]游戏(动态规划)

    [BZOJ1025][SCOI2009]游戏(动态规划) 题面 BZOJ 洛谷 题解 显然就是一个个的置换,那么所谓的行数就是所有循环的大小的\(lcm+1\). 问题等价于把\(n\)拆分成若干个数 ...

  5. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  6. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  7. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  8. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  9. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

随机推荐

  1. DOM0级事件绑定之js的onclick事件

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Redux DevTools Extension 的使用

    网址  https://github.com/zalmoxisus/redux-devtools-extension 1.const composeEnhancers = window.__REDUX ...

  3. mysql查询相关

    查询事务 SELECT * FROM information_schema.INNODB_TRX\G; 查询正在锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB ...

  4. Expedition

    Expedition 给出n+1个整点\(\{x_i\}\)(保证递增排序),一个司机带着初始油量p,从\(x_{n+1}\)出发,每行驶一个单位长度消耗一个油量,其中\(x_1\sim x_n\)为 ...

  5. codeforces round 433 D. Jury Meeting

    题目大意: 输入n,m,k,分别代表城市的数量,城市编号1~n,航班的数量以及会议必须所有人员到会一起商议的天数,然后及时输入m行航班的信息,每一行输入d,f,t,c分别表示航班到站和始发的那一天(始 ...

  6. 高级运维(三):部署Lnmp环境、构建Lnmp平台、地址重写

    一.部署LNMP环境 目标: 安装部署Nginx.MariaDB.PHP环境 1> 安装部署Nginx.MariaDB.PHP.PHP-FPM: 2> 启动Nginx.MariaDB.FP ...

  7. SpringBoot整合MongoDB,在多数据源下实现事务回滚。

    项目中用到了MongoDB,准备用来存储业务数据,前提是要实现事务,保证数据一致性,MongoDB从4.0开始支持事务,提供了面向复制集的多文档事务特性.能满足在多个操作,文档,集合,数据库之间的事务 ...

  8. 上传漏洞-js验证

    关于文件上传漏洞,想必玩web安全的同学们都有接触,之前本站也发布过一篇文章介绍文件上传漏洞的各种绕过方法,但是只是有文档却没有演示代码, 最近给公司一客户培训,就照文档中的绕过写出了相应的代码,方便 ...

  9. 傻瓜教程--------------linix上安装jdk

    大致步骤可分为3步,下面会详细解释 1:Jdk 的下载 2: jdk的解压 3: 环境变量的配置 一:jdk的下载 1官网下载jdk https://www.oracle.com/technetwor ...

  10. Useful code snippets with C++ boost

    Useful code snippets with C++ boost Is Punctuation It’s very straight forward to use boost.regex as ...