首页 > 代码库 > HDU 4952 Number Transformation 多校8 机智数学
HDU 4952 Number Transformation 多校8 机智数学
哎。这个题想了好久,状态不对啊。。。一个大家都出的题。。当时想到肯定是可以有什么规律来暴力,不用算到10的10次方
对于某个k,x。从1到k循环,每次求一个新的x,这个x要大于等于原x,并且要是i的倍数。。。
一直觉得有规律可循,后来知道就是倍数,我们设倍数为 b, 则b2*(i+1)>=b1*(i);可以知道b2>=b1-b1/(i+1),则,b2在b1小于等于i+1的时候便不会再变换,题目最大的倍数为10的10次方,根据第一个式子,最多经过10的五次方,倍数就会缩为10的五次方,此时i也>=10的五次方,不会再变换了,。。、所以最多为10的五次方就可以over了
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define LL __int64using namespace std;LL n,k;int main(){ int kase=0; while (scanf("%I64d%I64d",&n,&k)!=EOF) { if (!n && !k) break; LL bei=n; bool flag=1; for (LL i=1;i<=k;i++){ LL tmp=n/i; if(tmp*i!=n){ bei=tmp+1; n=bei*i; } else{ bei=tmp; } if (bei<i+1 && i<k){ flag=0; break; } } if (!flag) n=bei*k; printf("Case #%d: ",++kase); printf("%I64d\n",n); }}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。