hdu 4952

Number Transformation

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 418    Accepted Submission(s): 201

Problem Description

Teacher Mai has an integer x.
   He does the following operations k times. In the i-th operation, x becomes the least integer no less than x, which is the multiple of i.
   He wants to know what is the number x now.

Input

There are multiple test cases, terminated by a line "0 0".
   For each test case, the only one line contains two integers x,k(1<=x<=10^10, 1<=k<=10^10).

Output

For each test case, output one line "Case #k: x", where k is the case number counting from 1.

Sample Input

2520 10
2520 20
0 0

Sample Output

Case #1: 2520
Case #2: 2600

Source

2014 Multi-University Training Contest 8

Recommend

hujie

必须强调,不会的题一定不要偷懒,打表!!!!!!!!!!!!!!

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdlib>
 4 #include<cstdio>
 5 #include<algorithm>
 6 #include<cmath>
 7 #include<queue>
 8 #include<map>
 9
10 #define N 1505
11 #define M 15
12 #define mod 1000000007
13 #define mod2 100000000
14 #define ll long long
15 #define maxi(a,b) (a)>(b)? (a) : (b)
16 #define mini(a,b) (a)<(b)? (a) : (b)
17
18 using namespace std;
19
20 ll x,k,i,tmp;
21 int cnt;
22 /*
23 void ini()
24 {
25     int i,k,j;
26     for(i=1;i<=15;i++){
27         for(k=1;k<=15;k++){
28             int x=i;
29             for(j=1;j<=k;j++){
30                 while(x%j!=0){
31                     x++;
32                 }
33             }
34             printf(" i=%d k=%d x=%d\n",i,k,x);
35         }
36     }
37 }*/
38
39 int main()
40 {
41     //ini();
42     //freopen("data.in","r",stdin);
43     //scanf("%d",&T);
44     //for(int cnt=1;cnt<=T;cnt++)
45     //while(T--)
46     cnt=1;
47     while(scanf("%I64d%I64d",&x,&k)!=EOF)
48     {
49         if(x==0 && k==0) break;
50         printf("Case #%d: ",cnt);cnt++;
51         tmp=-1;
52         for(i=1;i<=k;i++){
53             if(x%i!=0){
54                 x=(x/i+1)*i;
55
56             }
57             if(x%i==0 && (x/i)==i-1){
58                     //printf(" i=%I64d i-1=%I64d x=%I64d\n",i,x/(i),x);
59                     tmp=x/i;
60                     break;
61                 }
62         }
63         if(tmp==-1){
64             printf("%I64d\n",x);
65         }
66         else printf("%I64d\n",tmp*(k-i)+x);
67     }
68
69
70
71     return 0;
72 }

hdu 4952,布布扣,bubuko.com

时间: 2024-12-26 06:58:07

hdu 4952的相关文章

HDU 4952 Poor Mitsui(贪心)

HDU 4957 Poor Mitsui 题目链接 思路:利用相邻交换法去贪心即可,注意容积为0的情况,这是个坑点 代码: #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N = 45; struct SB { int a, b; } sb[N]; bool cmp(SB x, SB y) { return x.b * y.a < x.

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也&

hdu 4952 Number Transformation (找规律)

题目链接 题意:给你个x,k次操作,对于第i次操作是:要找个nx,使得nx是>=x的最小值,且能整除i,求k次操作后的数 分析: 经过打表找规律,会发现最后的x/i,这个倍数会趋于一个固定的值,求出这个固定的值和K相乘就可以了, 为什么会趋于固定的值呢,因为最后虽然i在不断增长,但是x也是在增长的,每次的倍数会回退一个发现 有余数,然后再加上一个,所以趋于稳定. 官方题解: 1 #include <iostream> 2 #include <cstdio> 3 #includ

2014多校联合八(HDU 4945 HDU 4946 HDU 4948 HDU 4950 HDU 4951 HDU 4952)

HDU 4945 2048 题意:给你一堆数字  问有几个子集可以拼出2048 思路: 拼数字的规则相当于让数字乘二  所以不是2^i的数字不会拼出2048  那么这些数可选可不选  即为2^cnt种可能 之后只要计算出有几个子集不可能拼出2048即可  不过简单的直接dp是2048*100000的复杂度的  会TLE 所以要变成先枚举元素  再枚举该种元素个数  再枚举2048种状态  然后利用组合求(组合里需要逆元) 为什么这样快?  因为比如枚举2^5这个元素的时候  最多取2^6个  枚

HDU 4952 Number Transformation(公式)

HDU Number Transformation 题目链接 题意:按题目中要求求出最后的n 思路:推公式(i+1)x′>=ix,得到x′>=1+floor(xi+1),这样一来就可以递推x,那么注意题目中k很大,但是实际上如果i到一定数值之后,x就不会在增长了,这时候就可以break了 代码: #include <cstdio> #include <cstring> typedef long long ll; ll n, k; int main() { int cas

HDU 4952 Number Transformation 规律题

打表可以知道到后面增量都一样了,, 推论就是  i 和 i+1 互质 #include <cstdio> #include <algorithm> #include <cstring> #include <iostream> using namespace std; typedef long long ll; const ll mx = 120000; int main() { int cas = 0; ll x, k, y, dis, i; while (

HDU 4952 Number Transformation 乱搞

题意:给你一个数x,给你K次操作,每一次x变为大于等于 x 且是 i 的倍数的数. 解题思路:可以知道  如果 变化以后  x 是i 和 i+1 的公倍数的倍数的话,那么x的值是不会变的,x  < i * i 的时候,x值肯定会变,每一次增大i(这里后面就可以直接用公式) 所以我们只需要枚举到前面那种情况就可以了. 解题代码: 1 // File Name: 1008.cpp 2 // Author: darkdream 3 // Created Time: 2014年08月14日 星期四 13

HDU 4952 Number Transformation 打表规律

点击打开链接 Number Transformation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 495    Accepted Submission(s): 248 Problem Description Teacher Mai has an integer x. He does the following operation

多第八田间学校:几何+图论出度+模拟+找到规律

HDU 4946 pid=1002&cid=509" style="color:rgb(26,92,200); text-decoration:none; font-family:Tahoma; background-color:rgb(215,235,255)">Area of Mushroom 这题WA了7发才过,队友做的,然后一起debug了好久. 刚開始是没排序. 然后是在同一个位置的点没有处理好. 然后把这两个问题搞定就A了. #include <