Thanks very much for the hints. 2009/7/23 Tim MacDonald <[email protected]>: > That isn't an issue, because S(n,n) will still be much less than 10^18, and > fit into a 32-bit int. > > The real problem, however, is with the idea of counting S(n), S(n+1), etc. > If m is large, you'll be waiting a looooong time for this counting operation > to complete. > > You need to be more efficient, for instance, efficiently determining how > many numbers in the range [a,b] are "clear". This actually becomes a > combinatorics problem of sorts. Think about this, how many numbers in the > range [1000000,1999999] have sum of squares of their digits equal to say, > 19? Repeat for other possible sums that are "clear", and you know how many > numbers across the entire range are clear. Extend this basic idea into your > completed solution. > > -Tim MacDonald > > > > > 2009/7/22 Iuri <[email protected]> >> >> Reading the question, I guess we can define n = 10^10 and m = 10^15 - 1, >> and it will broke this idea, because the maximum is not 10^15 - 1 anymore. >> >> 2009/7/23 Hawston LLH <[email protected]> >>> >>> "long long" arithmetic calculation (+ - x /) is fully supported by most >>> machines, so this should not be a problem. :) >>> >>> 2009/7/23 周游弋 <[email protected]> >>>> >>>> Because any number bigger than 162 can be eventually summed back to a >>>> value less than 162, 999 -> 243 -> 29, 9999 -> 324 -> 29 etc. Thus if we >>>> could find determine the clear numbers in [1,162], then all integers can be >>>> deducted eventually by (or "to") these determined numbers. >>>> >>>> >>>> >>>> As for finding S(n), it is just a counting problem. Starting from n, try >>>> n+1, n+2, n+2 .... And for S(n, m), just start from n+m, try n+m+1, >>>> n+m+2... As >>>> I said, no matter how big the number is, it will eventually fall in between >>>> [1,162] in four or five steps. >>>> >>>> >>>> >>>> As for the concrete implementation, there is an issue. The data scale is >>>> too big for long integer. Though a "double" variable could do, there will >>>> be >>>> precision problems with "double" values. In GNU extension we could use a >>>> "long long" type but it destroy the portability of the solution. So, we >>>> may >>>> need to write a function to sum two big integers together, digit by digit, >>>> to compute n+m when n or m are rather large. >>>> >>>> >>>> >>>> For this specific problem, first build a look-up table T[i] (i = 1, 2, >>>> 3, ... , 1215) using the method we discussed, T[i] denotes whether i is a >>>> clear number. Now compute n+m by the "big integer adding function". >>>> Starting >>>> from n+m+1, sum all its digits up and look it up in T. >>>> >>>> >>>> >>>> ________________________________ >>>> >>>> 发件人: [email protected] [mailto:[email protected]] >>>> 代表 Hawston LLH >>>> 发送时间: 2009年7月22日 15:58 >>>> 收件人: [email protected] >>>> 主题: Re: 答复: Clear Numbers exercise >>>> >>>> >>>> >>>> i think either you misunderstood the S(n) which is the minimum clear >>>> number greater than n or i have misunderstood your purpose of "the largest >>>> possible sum of all digits". Could you elaborate your purpose to find >>>> "162"? >>>> >>>> >>>> >>>> >>>> >>>> On Wed, Jul 22, 2009 at 3:35 PM, 周游弋 <[email protected]> wrote: >>>> >>>> For the largest possible value is 10^15, thus the largest possible sum >>>> of all digits comes from 999999999999999, which gives 15*81 = 1215 >>>> For 1215, the largest possible sum of all digits comes from 999 --> 243. >>>> For 243, the largest possible sum of all digits comes from 199 --> 163 >>>> For 163, it's 162. And it ends here. >>>> >>>> Finding the clear numbers in [1,162] is trival. >>>> >>>> -----邮件原件----- >>>> 发件人: [email protected] [mailto:[email protected]] >>>> 代表 FameofLight >>>> 发送时间: 2009年7月22日 15:00 >>>> 收件人: google-codejam >>>> 主题: Re: Clear Numbers exercise >>>> >>>> Anybody please give me some clue on How to Solve this problem. >>>> >>>> On Jul 22, 5:26 am, khanh le <[email protected]> wrote: >>>> > Dear people, >>>> > i have a exercise, so i want to you solve it. you must code by C++ >>>> > langguage >>>> > now, read the exercise below: >>>> > >>>> > Peter has just found a definition of *clear numbers* as the following: >>>> > for >>>> > each positive integer n, we form another number by summing the squares >>>> > of >>>> > the digits of n. We repeat this procedure. If at some step, we obtain >>>> > the >>>> > number 1 then n is called a *clear number*. For example, for n=19, we >>>> > have: >>>> > >>>> > 19 → 82 (= 12 +92) → 68 → 100 → 1 >>>> > >>>> > Thus, 19 is a clear number. >>>> > >>>> > Not all numbers are clear numbers. For example, for n=12, we have: >>>> > >>>> > 12 → 5 → 25 → 29 → 85 → 89 → 145 → 42 → 20 → 4 → 16 → 37 → 58 → 89 → >>>> > 145 >>>> > >>>> > Peter is very interested in this definition of clear numbers. He >>>> > issued a >>>> > challenge to the landlord: given a positive integer n, find S(n), the >>>> > clear >>>> > number succeeding n, i.e. S(n) is the minimum clear number greater >>>> > than n. >>>> > However, this question is so easy for the landlord that he challenged >>>> > Peter >>>> > with another problem: given two positive integers n and m (1 ≤ n, m ≤ >>>> > 1015), >>>> > find the number Sm(n)=S(S(...S(n) )) which is the mth clear number >>>> > succeeding >>>> > n. >>>> > >>>> > Please help Peter to solve the task! >>>> > Input >>>> > >>>> > The first line contains t (0 < t ≤ 20) , the number of test cases. >>>> > >>>> > Each line in the next t lines contains two positive integers n and m. >>>> > Output >>>> > >>>> > Print t lines, each line contains the result of the corresponding test >>>> > case. >>>> > Example >>>> > >>>> > *Input* >>>> > 2 >>>> > 18 1 >>>> > 1 145674807 >>>> > >>>> > *Output* >>>> > 19 >>>> > 1000000000 >>>> > >>>> > Notes >>>> > >>>> > There are 50% of the test cases in which 1 ≤ n, m ≤ 107. >>>> > >>>> > -- >>>> > Regard! >>>> > Khanh >>>> >>>> >>>> >>>> >>>> >>> >>> >>> >> >> >> >
-- Best regards 周游弋(Joel Zhou) --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "google-codejam" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/google-code?hl=en -~----------~----~----~----~------~----~------~--~---
