模拟 666

题面去内网找。。

虽然是模拟,但必须要写一写。为什么我考试时想不出来,但我同桌成了0.1s内唯一一个A的。。。
一共有两种转移
1.i->i*k
2.i->i-1
而且,f[100000]<50,那么我们枚举步数,然后对于每一个已经到达的点,算他在当前步数最多能更新到多远的点。。
就这样,人家考试A了,我30.。。。。。

#pragma GCC optimize("O3")
#include
#include
#define N 1000050
int n,s,f[1000055];
int main()
{scanf("%d",&n);memset(f,-1,sizeof(f));f[1]=0;while(f[n]==-1){s++;for(int i=1;i<=n+45;i++){if(f[i]==-1)continue;int l=i*(s-f[i]);if(l45&&f[i]1)f[i*(s-f[i])]=s;if(f[i-1]==-1)f[i-1]=f[i]+1;}}printf("%d",f[n]);
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部