夏令营501-511NOIP训练16——数字转换
传送门:QAQQAQ
题意:如果一个数x的约数和(不包括它本身,下同)比它本身小,那么x可以变成它的约数和;如果对于某个y>x且y的约数和为x,那么x也可以变成y。例如,4可以变为3,1可以变为7。限定所有的数字变换在不超过n的正整数范围内进行,求不断进行数字变换且没有重复数字出现的最多变换步数。
思路:YY一下,若$x$可以变为$y$,则$y$也一定能变为$x$,所以我们对于可以互相变换的点建一条无向边,因为每一个点最多之和一个值比它小的点连边,所以不可能出现环(这点可以人工YY证明)
所以我们在这个无环“森林”中跑一个最长链即可
代码:(其实以1为根跑直径不够严谨,用DP算最长链更好)
#include<bits/stdc++.h>
using namespace std; vector<int> v[];
int d[]; void dfs(int u,int f,int depth)
{
d[u]=depth;
for(int i=;i<(int)v[u].size();i++)
{
if(v[u][i]==f) continue;
dfs(v[u][i],u,depth+);
}
} void init(int n)
{
for(int i=;i<=n;i++)
{
int sum=;
for(int j=;j*j<=i;j++)
{
if(i%j==)
{
sum+=j;
if(j*j!=i&&j!=) sum+=i/j;
}
}
if(sum<i)
{
v[sum].push_back(i);
v[i].push_back(sum);
}
}
// for(int i=1;i<=n;i++)
// {
// cout<<i<<":";
// for(int j=0;j<v[i].size();j++) cout<<v[i][j]<<" ";
// cout<<endl;
// }
} int main()
{
int n; cin>>n;
init(n);
dfs(,-,);
int s=-,maxn=-;
for(int i=;i<=n;i++)
{
if(maxn<d[i])
{
maxn=d[i];
s=i;
}
}
dfs(s,-,);
for(int i=;i<=n;i++)
{
if(maxn<d[i]) maxn=d[i];
}
cout<<maxn<<endl;
return ;
}
夏令营501-511NOIP训练16——数字转换的更多相关文章
- test20190731 夏令营NOIP训练16
0+90+0=90.我只挑了T2做. 连接格点 有一个M行N列的点阵,相邻两点可以相连.一条纵向的连线花费一个单位,一条横向的连线花费两个单位.某些点之间已经有连线了,试问至少还需要花费多少个单位才能 ...
- 在 shell 脚本获取 ip、数字转换等网络操作
在 shell 脚本获取 ip.数字转换等网络操作 ip 和数字的相互转换 ip转换为数字 :: function ip2num() { local ip=$1 local a=$(echo $ip ...
- js字符串转换成数字与数字转换成字符串的实现方法
转载:点击查看地址 js字符串转换成数字 将字符串转换成数字,得用到parseInt函数.parseInt(string) : 函数从string的开始解析,返回一个整数. 举例:parseInt(' ...
- js字符串转换成数字,数字转换成字符串
转自网络,忘记出处了. js字符串转换成数字 将字符串转换成数字,得用到parseInt函数. parseInt(string) : 函数从string的开始解析,返回一个整数. 举例:parseIn ...
- C/C++中字符串与数字转换
本文总结了四种字符串和数字相互转换的方法,方法一和方法二是c++中的方法,方法三和方法四是C语言库函数的方法. 方法一:c++11中string中添加了下面这些方法帮助完成字符串和数字的相互转换 st ...
- js大数字转换,将大额数字转换为万、千万、亿等
代码 /** * 大数字转换,将大额数字转换为万.千万.亿等 * @param value 数字值 */ export function bigNumberTransform (value) { co ...
- numtoyminterval函数——数字转换函数
numtoyminterval函数——数字转换函数 ----转至51CTO 水滴的博客 语法:NUMTOYMINTERVAL ( n , 'char_expr' ) c ...
- 比较java与c语言中数字转换成字符的不同
java java中将数字转换成字符非常方便,只要用一个"+"然后在跟一个空格行了.比如,你输入一个122 ,就会变成"122 ". import java.u ...
- ORACLE数字转换人民币大写
ORACLE 数字转换人民币大写 示例. 数字 :183066999230.68 人民币大写 :壹仟捌佰参拾亿陆仟陆佰玖拾玖万玖仟贰佰参 ...
随机推荐
- file_get_contents(): SSL operation failed with code 1
出现file_get_contents(): SSL operation failed with code 1的错误 方法需要添加参数,如下: $stream_opts = [ "ssl&q ...
- Shell脚本 全局变量、局部变量
在不同的作用域中,同名的变量不会相互干涉,就好像 A 班有个叫小明的同学,B 班也有个叫小明的同学,虽然他们都叫小明(对应于变量名),但是由于所在的班级(对应于作用域)不同,所以不会造成混乱.但是如果 ...
- Redis探索之路(六):Redis的常用命令
一:键值相关命令 1.keys Pattern模糊查询 keys my* 2.exists某个key是否存在 exists key1 3.del 删除一个key del key1 4.expire设置 ...
- HTTP状态码及请求头
状态码 状态码告知从服务器端返回的请求结果 一般可分为5个大类 1XX Informational(信息性状态码) 2XX Success(成功状态码) 3XX Redirection(重定向状态码) ...
- C#中反射的基础基础基础
class Program { static void Main(string[] args) { Type t = typeof(Student);//typeof(类) 取类的类型 并且存储在Ty ...
- 每天进步一点点-深度学习入门-基于Python的理论与实现 (2)
今天要补上两天的 不补了,新手,看的比较慢-- 手写识别例子跳过先 思考如何实现数字5的识别 三种方法: 训练数据:学习,寻找最优解 测试数据:评价模型能力. 损失函数:以损失函数为线索寻找自由权重参 ...
- python系统模块
Python中大多数系统接口都集中在两个模块:sys和os.这么说有点过于简单化 还有一些其他的表转模块也属于这个领域他们包括: glob 用于文件名的扩展 socket 用于网络连接和进程间通信(I ...
- C++11的闭包(lambda、function、bind)
c++11开始支持闭包,闭包:与函数A调用函数B相比较,闭包中函数A调用函数B,可以不通过函数A给函数B传递函数参数,而使函数B可以访问函数A的上下文环境才可见(函数A可直接访问到)的变量:比如: 函 ...
- thinkphp 模板驱动
模板引擎驱动完成了第三方模板引擎的支持,通过定义模板引擎驱动,我们可以支持Smarty.TemplateLite.SmartTemplate和EaseTemplate等第三方模板引擎. 默认的模板引擎 ...
- 线性筛积性函数+反演T套路——bzoj4407
#include<bits/stdc++.h> using namespace std; #define ll long long #define mod 1000000007 #defi ...