1025: [SCOI2009]游戏 - BZOJ】的更多相关文章

Description windy学会了一种游戏.对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应.最开始windy把数字按顺序1,2,3,……,N写一排在纸上.然后再在这一排下面写上它们对应的数字.然后又在新的一排下面写上它们对应的数字.如此反复,直到序列再次变为1,2,3,……,N. 如: 1 2 3 4 5 6 对应的关系为 1->2 2->3 3->1 4->5 5->4 6->6 windy的操作如下 1 2 3 4 5 6 2 3 1 5 4 6…
1025: [SCOI2009]游戏 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1533  Solved: 964[Submit][Status][Discuss] Description windy学会了一种游戏.对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应.最开始windy把数字按顺序1,2,3,……,N写一排在纸上.然后再在这一排下面写上它们对应的数字.然后又在新的一排下面写上它们对应的数字.如此反复,直到序列再次变为1,2…
显然题目要求长度为n的置换中各个循环长度的lcm有多少种情况. 判断一个数m是否是满足题意的lcm. m = ∏ piai, 当∑piai ≤ n时是满足题意的. 最简单我们令循环长度分别为piai,不足n的话,我们令其他循环长度为1, 补到=n为止. 这样它们的lcm显然是=m的. 然后就是一个背包了...dp(i, j) = dp(i - 1, j) + ∑1≤t≤adp( i - 1, j - pt ) 表示前i个质数, 和为j有多少中方案 #include<bits/stdc++.h>…
[SCOI2009]游戏 思路: 和为n的几个数最小公倍数有多少种. dp即可: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 1005 #define ll long long int n,num; ll dp[maxn][maxn],pi[maxn]; bool if_p[maxn]; void euler(int limit) { ;i<=limit;i++) { if(!if_p[i]) pi[++n…
题目链接:BZOJ - 1025 题目分析 显然的是,题目所要求的是所有置换的每个循环节长度最小公倍数的可能的种类数. 一个置换,可以看成是一个有向图,每个点的出度和入度都是1,这样整个图就是由若干个环构成,这些环的长度和为 n . 因此,就是要求出和为 n 的正整数的最小公倍数的可能情况. 有一个性质:这些正整数中有合数存在的最小公倍数,都可以用全是质数的情况包含. 所以我们只要求出用质数组成的情况就可以了.我们要求的就是,若干个质数,它们的和小于等于 n,它们的最小公倍数情况. 先筛法求出…
http://www.lydsy.com/JudgeOnline/problem.php?id=1025 首先根据置换群可得 $$排数=lcm\{A_i, A_i表示循环节长度\}, \sum_{i=1}^{k} A_i = n$$ 根据lcm的定义,分解质因数拆掉$A_i=p_1^{x_1} \times p_2^{x_2} \times ... \times p_k^{x_k}$后 $$lcm=\prod_{i} p_i^{max\{x_i\}}$$ 所以我们只看$max\{x_i\}$即可…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1025 [题意] 给定n,问1..n在不同的置换下变回原序列需要的不同排数有多少种. [思路] 对于一个置换,如果分解后的到的循环长度为 A1,A2,A3… 则答案为lcm(A1,A2…)的不同种数,即有多少个不同的lcm满足: A1+A2+A3+…=n lcm=lcm(A1,A2,A3…) 对于A[1..]的lcm, lcm=a1^max{p1}*a2^max{p2}.. 因为很多情…
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1025 分析:首先这个问题等价于A1+A2+……Ak=n,求lcm(A1,A2,……,Ak)的种数 考虑一个Lcm=p1^a1 * p2^a2 * …… pk^ak 是否可能出现 WJMZBMR提出,能出现的充要条件是p1^a1+p2^a2+……+pk^ak<=n 证明: 先证必要性: ∵p1^a1 p2^a2 …… pk^ak 这k个数的最小公倍数正好是lcm 且 k<n (n以内的质数的…
标题效果:特定n.行定义一个替代品1~n这种更换周期发生后,T次要(T>0)返回到原来的顺序 找到行的所有可能的数 循环置换分解成若干个,然后行位移数是这些周期的长度的最小公倍数 因此,对于一些,是将这个数分解质因数.令x=p1^a1*p2^a2*...*pk^ak.若p1^a1+p2^a2+...+pk^ak<=n,则x就是可能的排数 分组背包就可以 令f[i][j]表示用前i个质数,和为j能得出的数的数量 每组的物品是pi^1~pi^ai 时间复杂度O(n/lgn*logn*n)=O(n^…
传送门 题意:求$n$个数组成的排列变为升序有多少种不同的步数 步数就是循环长度的$lcm$..... 那么就是求$n$划分成一些数几种不同的$lcm$咯 然后我太弱了这种$DP$都想不出来.... 通过枚举每个质因子的指数来求$lcm$ $d[i][j]$表示前$i$个质因子当前和为$j$的方案数 转移枚举质因子的指数 但这样我们忽略了可以划分出$1$,所以统计答案时枚举$j$ 或者我们直接初始化$d[0][i]=1$ #include<iostream> #include<cstdi…