分治魔法石的诱惑

Posted scott527407973

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分治魔法石的诱惑相关的知识,希望对你有一定的参考价值。

问题 C: 【分治】魔法石的诱惑

时间限制: 1 Sec  内存限制: 128 MB
提交: 88  解决: 37
[提交] [状态] [讨论版] [命题人:admin]

题目描述

修罗王远远地看见邪狼狂奔而来,问道:“慌慌张张地跑什么?” 邪狼大口大口地喘气:“我路过一家魔法石店,看到摆着那么多高阶魔法石,我就跑进去抢了一大袋。” 修罗王怒道:“光天化日,朗朗乾坤,众目睽睽之下,你也敢抢?” 邪狼:“我抢魔法石的时候,压根儿就没看见人,眼里只看见魔法石了。” 修罗王:“……” 其实邪狼的贪婪很容易理解,因为高阶魔法石有一个特征,即它的重量进行阶乘运算后末尾有几个0,就拥有同等重量普通魔法石几倍的魔法力。例如5!=5×4×3×2×1=120,而120结尾包含1个零,这意味着该魔法石拥有同等重量的普通的魔法石1倍的魔法力。你的任务是找到最小自然数N,使N!在十进制下包含Q个零。

 

输入

一个数Q(0≤Q≤108

 

输出

如果误解,输出“No solution”,否则输出N。

 

样例输入

2

 

样例输出

10

技术分享图片
 1 #include <iostream>
 2 
 3 using namespace std;
 4 typedef long long ll;
 5 ll get_minn(ll x)
 6 {
 7     ll ans=0;
 8     while(x>0)
 9     {
10         ans+=x/5;
11         x/=5;
12     }
13     return ans;
14 }
15 int main()
16 {
17     ll q;
18     cin>>q;
19     if(q==0)
20     {
21         cout<<"0"<<endl;
22         return 0;
23     }
24     ll n=0,temp=0;
25     while(temp<q)
26     {
27         n+=5;
28         temp=get_minn(n);
29     }
30     if(temp>q)
31         cout<<"No solution"<<endl;
32     else if(temp==q)
33         cout<<n<<endl;
34 //    cout << "Hello world!" << endl;
35     return 0;
36 }
View Code

 






以上是关于分治魔法石的诱惑的主要内容,如果未能解决你的问题,请参考以下文章

自我练习 - 分治算法

动态规划完全背包问题

优秀API设计的十大原则

[noi713]魔法

js兵器谱之魔法召唤师:call / apply

bzoj3343 教主的魔法分块入门By cellur925