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 3 1 2 4 5 6 1 2 3 5 4 6 2 3 1 4 5 6 3 1 2 5 4 6 1 2 3 4 5 6 这时,我们就有若干排1到N的排列,上例中有7排。现在windy想知道,对于所有可能的对应关系,有多少种可能的排数。

  题意是让我们求回归到原序列的置换次数,也就是对于这个置换的每一个循环大小的最小公倍数

  如(123)(45)(6)

  对于第一个循环回归需要3x次(x代表任意自然数),第二个循环需要2x次,第三个循环需要x次

  显然对于这样的置换答案是6次

  有多少种可能的排数,也就是这个最小公倍数有多少种可能..?

  看起来比较奇怪的问题...

  我们用一个序列来表示最小公倍数

  2  3   5   7   11...997

  x1 x2  x3  x4  x5...x168

  最小公倍数就是2^x1*3^x2*5^x3...997^x168(说白了就是质因数分解>w<)

  对于每一个循环,它的大小质因数分解之后对于每个质因子的系数都<=上面的序列

  然后原问题就是满足题意的x1,x2..x168有多少种

  我们来考虑怎样才会不满足题意...

  首先x1,x2..x168再小也无所谓,因为就算全为0也是满足题意的,剩下的都可以用1来补全

  显然对于这些x最小的n就是2^x1+3^x2...+997^x168

  因为一旦2出现了x1次,说明一定有一个循环的个数中含有2^x1这个因子,我们令其中一个等于这个

  为了使n最小化,其它都不含2这个因子

  另外加法比乘法代价小这个显然...

  也就是说对于x序列的限制也就是2^x1+3^x2...997^x168<=n

  非常眼熟...非常简单的01背包...

  

 /**************************************************************
Problem: 1025
User: mjy0724
Language: Pascal
Result: Accepted
Time:112 ms
Memory:8236 kb
****************************************************************/ program bzoj1025;
const maxn=;
var n,ans:int64;
i,j,k:longint;
p:array[-..maxn]of int64;
f:array[-..maxn,-..maxn]of int64;
vis:array[-..maxn]of boolean; procedure Euler;
var i,j:longint;
begin
fillchar(vis,sizeof(vis),true);
p[]:=;
for i:= to n do
begin
if vis[i] then
begin
inc(p[]);
p[p[]]:=i;
end;
for j:= to p[] do
begin
if i*p[j]>n then break;
vis[i*p[j]]:=false;
if i mod p[j]= then break;
end;
end;
end; begin
readln(n);
Euler;
fillchar(f,sizeof(f),);
f[,]:=;
for i:= to p[] do
for j:= to n do
begin
f[i][j]:=f[i-][j];
k:=p[i];
while k<=j do
begin
inc(f[i,j],f[i-,j-k]);
k:=k*p[i];
end;
end;
ans:=;
for i:= to n do inc(ans,f[p[],i]);
writeln(ans);
end.

[BZOJ1025] [SCOI2009]游戏 解题报告的更多相关文章

  1. bzoj千题计划116:bzoj1025: [SCOI2009]游戏

    http://www.lydsy.com/JudgeOnline/problem.php?id=1025 题目转化: 将n分为任意段,设每段的长度分别为x1,x2,…… 求lcm(xi)的个数 有一个 ...

  2. BZOJ1025: [SCOI2009]游戏

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

  3. NOIP2008 普及组T3 传球游戏 解题报告-S.B.S.

    题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同 ...

  4. SDOI2017 BZOJ 4820 硬币游戏 解题报告

    写在前面 此题网上存在大量题解,但本人太菜了,看了不下10篇均未看懂,只好自己冷静分析了.本文将严格详细地论述算法(避免一切意会和玄学),因此可能会比其它题解更加理论化一些,希望能对像我一样看了其它题 ...

  5. 洛谷 P4705 玩游戏 解题报告

    P4705 玩游戏 题意:给长为\(n\)的\(\{a_i\}\)和长为\(m\)的\(\{b_i\}\),设 \[ f(x)=\sum_{k\ge 0}\sum_{i=1}^n\sum_{j=1}^ ...

  6. [HEOI2016/TJOI2016]游戏 解题报告

    [HEOI2016/TJOI2016]游戏 看起来就是个二分图匹配啊 最大化匹配是在最大化边数,那么一条边就代表选中一个坐标内的点 但是每一行不一定只会有一个匹配 于是把点拆开,按照'#'划分一下就好 ...

  7. 洛谷 P1129 [ZJOI2007]矩阵游戏 解题报告

    P1129 [ZJOI2007]矩阵游戏 题目描述 小\(Q\)是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏――矩阵游戏.矩阵游戏在一个\(N*N\)黑白方阵进行(如同国际象棋一般 ...

  8. 洛谷 P2059 [JLOI2013]卡牌游戏 解题报告

    P2059 [JLOI2013]卡牌游戏 题意 有\(n\)个人玩约瑟夫游戏,有\(m\)张卡,每张卡上有一个正整数,每次庄家有放回的抽一张卡,干掉从庄家起顺时针的第\(k\)个人(计算庄家),干掉的 ...

  9. 洛谷 P1057 传球游戏 解题报告

    P1057 传球游戏 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹 ...

随机推荐

  1. samba与apache配置使用

    samba与apache根目录 1.直接将apache用户作为samba用户 2.给apache用户赋宇网站根目录的acl rwx权限 #注意 第一次不要加默认的权限 setfacl -m u:apa ...

  2. 【PHP】进一法取整、四舍五入取整、忽略小数等的取整数方法大全

    PHP取整数函数常用的四种方法,下面收集了四个函数:经常用到取整的函数,今天小小的总结一下!其实很简单,就是几个函数而已--主要是:ceil,floor,round,intval PHP取整数函数常用 ...

  3. Linux的系统安全设置Shell脚本

    #!/bin/sh # desc: setup linux system security # powered by www.lvtao.net #account setup passwd -l xf ...

  4. 多表头的DataGridView

           上次在程序中要用到多表头的DataGridView,在网上搜索了一个,感觉还不错,现在简单的介绍一下它的用法.首先得把这个dll拷贝到相应的目录下,dll名称是myMultiColHea ...

  5. 汇编指令MOVSX与MOVZX

    MOVSX 操作数A ,操作数B MOVZX 操作数A ,操作数B 相同点:操作数B 空间必须小于 操作数A 1.格式与MOV基本相同 2.能完成小存储单元向大存储单元的数据传送 比如 movsx e ...

  6. bugku 字符正则

    字符?正则? <?php highlight_file('2.php'); $key='KEY{********************************}'; $IM= preg_mat ...

  7. 接口测试工具postman(三)添加断言

    每个用例执行完成后,可以通过添加断言来判断返回结果是否正确,即表示用例执行是否成功. 官方说明文档:https://learning.getpostman.com/docs/postman/scrip ...

  8. LeetCode 215——数组中的第 K 个最大元素

    1. 题目 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 ...

  9. ipfs补充命令

    ipfs cat之后 将文件保存在指定的路径下 添加都文件夹下面 ipfs files cp /ipfs/QmSkyNME8YqndkNq7ovKphpYwjk2hEQ61P1pjSckqLP6zt ...

  10. Hibernate 查询,返回结果设置到DTO

    1:原生sql的查询,返回结果设置到DTO: Query query = sessionFactoryRtData.getCurrentSession().createSQLQuery(hql.toS ...