hdu 4952 Number Transformation

来源:互联网 发布:周末网络国债理财 编辑:程序博客网 时间:2024/06/11 15:36

hdu 4952 Number Transformation

给定两个数 x k  对x执行k次操作 每次操作是的x变为不比本身小的的 i的倍数的最小数

比赛的时候 过了蛮多人的。。但是自己没什么思路。。。

队友就想着打表 去找规律   但是找的方向有问题吧。。找的是两个数之间的差值 没有去找倍数之间的关系。。

真不知道出题人都在想些什么 想出这些题来。。


这是给的题解的思路。。好赞的想法  注意最后是用倍数x与k值相乘

代码如下。。

#include <cstdio>#include <iostream>#include <cstring>#include <cmath>#include <algorithm>#include <string.h>#include <string>#define eps 1e-8#define op operator#define MOD  10009#define MAXN  100100#define FOR(i,a,b)  for(int i=a;i<=b;i++)#define FOV(i,a,b)  for(int i=a;i>=b;i--)#define REP(i,a,b)  for(int i=a;i<b;i++)#define REV(i,a,b)  for(int i=a-1;i>=b;i--)#define MEM(a,x)    memset(a,x,sizeof a)#define ll __int64using namespace std;ll a[10000];int main(){//freopen("o.txt","w",stdout);    ll x,k;    int cs=1;    while(scanf("%I64d%I64d",&x,&k)!=EOF)    {        if(x==0&&k==0)  break;        a[1]=x;        ll ans=1;        int i;        for(i=2;i<=k;i++)        {            x=x-x/i;            if(x<(i+1))   break;        }//        if(i<k)            printf("Case #%d: %I64d\n",cs++,x*k);    }    return 0;}


0 0
原创粉丝点击