Page 2 of 4

Posted: Thu May 06, 2004 11:03 am
by jackie
It is a simple problem.
But the test data may be reach the limit.
so you'd better use the long long int not the int

Posted: Mon Nov 22, 2004 6:25 pm
by jhonny_yang
printf ("<need one space> Case %lld: A = %lld, limit = <you add more space>%lld, number of terms = %lld",no,begin,limit,count);

i found the error look at space

Re: Need help.

Posted: Tue Nov 30, 2004 10:08 pm
by Heartattack!
_.B._,
You say:
Case 3: A = 715827881, limit = 2147483647, number of terms = 5

In this case, the number of terms should be 6.
1. 715827881*3 + 1 = 2147483644
2. 2147483644/2=1073741822
3. 1073741822/2=536870911
4. 536870911*3 + 1=1610612734
5. 1610612734/2=805306367
6. 805306367*3 + 1=2415919102>limit

You gotta count all :evil: the steps.
Hope it helps.

Posted: Tue Nov 30, 2004 10:09 pm
by Heartattack!
Johny,
You don't need a space before the "Case". I just got AC without it. 8) 8)

Re: Need help.

Posted: Sat Dec 25, 2004 11:03 am
by _.B._
Thanks H!
Had some other error too.

Keep posting!

SAMPLE IO

Posted: Thu May 12, 2005 12:34 pm
by Sedefcho
For anyone who might be interested here is some
sample I/O ( from an ACC program of course ).

It includes the 3 test cases posted above by _.B._


INPUT

Code: Select all

3 100
 34 100 
 75   250
 27   2147483647
 101 304
 101 303
 715827883 2147483647 
715827882   2147483647 
715827881 2147483647
2000 100000001
31003 100000001
99999  500000001
99999 1901000001
99999 2141000001
99997 2141000001
7771 2141000001
7773 2141000003
77799 2141900
 -2 -4

OUTPUT

Code: Select all

Case 1: A = 3, limit = 100, number of terms = 8
Case 2: A = 34, limit = 100, number of terms = 14
Case 3: A = 75, limit = 250, number of terms = 3
Case 4: A = 27, limit = 2147483647, number of terms = 112
Case 5: A = 101, limit = 304, number of terms = 26
Case 6: A = 101, limit = 303, number of terms = 1
Case 7: A = 715827883, limit = 2147483647, number of terms = 1
Case 8: A = 715827882, limit = 2147483647, number of terms = 33
Case 9: A = 715827881, limit = 2147483647, number of terms = 6
Case 10: A = 2000, limit = 100000001, number of terms = 113
Case 11: A = 31003, limit = 100000001, number of terms = 161
Case 12: A = 99999, limit = 500000001, number of terms = 227
Case 13: A = 99999, limit = 1901000001, number of terms = 227
Case 14: A = 99999, limit = 2141000001, number of terms = 227
Case 15: A = 99997, limit = 2141000001, number of terms = 90
Case 16: A = 7771, limit = 2141000001, number of terms = 115
Case 17: A = 7773, limit = 2141000003, number of terms = 40
Case 18: A = 77799, limit = 2141900, number of terms = 39

Collatz Problem

Posted: Thu May 26, 2005 11:00 am
by B.E
is there a quicker way of working out the cycle length then the standard iteration technique.
I can get the time down to 1.7 seconds but how do you guy get the time down to 0

Posted: Thu May 26, 2005 1:12 pm
by Sanny
Use memoization.

Regards
Sanny

Posted: Thu May 26, 2005 2:48 pm
by B.E
I tryed it but it was slower than before

Posted: Thu May 26, 2005 8:36 pm
by nibbler
why don't you post your code?

Posted: Fri May 27, 2005 12:00 am
by B.E
my code

Code: Select all

#include <stdio.h>
char *Format="%d %d";

int main() 
{ 
  int i,j; 
  register unsigned int tmp;
  register int current_length,Longest_Length; 
   while (scanf(Format,&i,&j)!= EOF)
  	{
			 Longest_Length = 0; 
    printf(Format,i,j);
   if (i > j) 
    { 
       i ^=j; 
       j ^=i; 
       i ^=j; 
    }
   if (j > 1000000)
   {
   	  	 return 1;
}
    for (;i <= j;i++) 
    { 
       tmp = i; 
       current_length = tmp < 3 ? tmp:2; 
       while (!(tmp < 3)) 
       { 
            if (tmp & 1)
            {
              //tmp = 3*tmp+1;
              __asm__ __volatile__("leal 1(%1,%1,2), %0" : "=q" (tmp)  : "0" (tmp) );
              
              current_length++;
		    }   
                   tmp >>= 1; 
                   current_length++;

       }              
       
         if (Longest_Length < current_length) 
             Longest_Length = current_length; 
   } 
   	 printf(" %d\n",Longest_Length);
}    
   
    return 0; 

}   


Posted: Fri May 27, 2005 12:05 am
by B.E
Prehaps maybe one of u guy can post some of your code

Posted: Wed Aug 23, 2006 10:25 am
by farzane
I'm getting WA.Could anyone tell me why?

Code: Select all

#include<iostream.h>
//#include<fstream.h>

void main(){
	//ifstream cin("694.in");
	long long A,L,terms,Case,mainA;
	cin>>A>>L;
	Case=0;
	mainA=A;
	while(A>0){
		Case++;
		terms=1;
		while(true){
			if(A==1)break;
			if(A%2==0){A/=2;terms++;}
			else{
				if(A>((L-1)/3))break;
				else {A=A*3+1;terms++;}
			}
		}
		cout<<"Case "<<Case<<": A = "<<mainA<<", limit = "<<L<<", number of terms = "<<terms<<endl;
		cin>>A>>L;
	}
}

Posted: Fri Dec 29, 2006 1:37 pm
by hi!man!
Hi, farzane!

"mainA=A;" must in your while loop.

I mean,

Code: Select all

...
while(A>0){
   mainA=A;
   ...
   }

P.E. problem 694

Posted: Wed Jan 10, 2007 12:54 pm
by WR
What can be the reason for a presentation error in the solution of problem 694??!!

There are no blank lines (according to the description), there's no multiple input/output.

I think I've already tried all possible combinations, including a leading space.

Any idea anybody?