Page 36 of 93

What is this ????

Posted: Sat Nov 27, 2004 8:42 pm
by Boss
I don't understand, the problem is easy.
the must dificult is when i < j or j > i.
you code is a spaghetti, you need help realy !!!jajajaja

Please Helpme - Time Limit Exceeded

Posted: Sun Dec 05, 2004 1:06 am
by Bayron
Please Help me.
What is problem?
The Status ever is "Time Limit Exceeded".
Tankyou...

[pascal]
program problema100_volume1;
var
I,J,C,N,CONT,AUX:longint;
begin
while(not eof) do
begin
read(I,J);
if (I<1000000) and (I>0) and (J<1000000) and (J>0) then
begin
write(I,' ',J,' ');
if I > J then
begin
AUX:= I;
I:= J;
J:= AUX;
end;
for C:=I to J do
begin
N:=C;
AUX:= 0;
repeat
inc(AUX);
if N=1 then
break
else
if (N mod 2) <> 0 then
N:= (3*N)+1
else
N:=N div 2;
until N <= 0;
if AUX > CONT then
CONT:= AUX;
end;
write(CONT);
end;
end;
end.
[/pascal]

Plz Help me !!!!

Posted: Wed Dec 08, 2004 8:35 pm
by phongtran
I still have problem with my code. it got WA. can anybody help me. Thanks you so much !!!
[pascal]
program problem_100 (input,output);
type
arr = array [1..1000000] of longint;
var
a : arr;

function compute(n : longint) : longint;
var count : longint;
begin
count := 1;
repeat
if n = 1 then
begin
compute := count;
exit;
end;
if odd(n) then
n := 3*n + 1
else
n := n div 2;
inc(count);
until false;
end;

function max_in(i,j : longint) : longint;
var max,k : longint;
begin
max := 0;
for k := i to j do
if max < a[k] then
max := a[k];
max_in := max;
end;

procedure solve;
var i,j,k : longint;
begin
fillchar(a,sizeof(a),0);
repeat
readln(i,j);
for k := i to j do
if a[k] = 0 then
a[k] := compute(k);
k := max_in(i,j);
writeln(i,#32,j,#32,k);
until eof;
end;

begin
solve;
end.
[/pascal]

Re: Plz Help me !!!!

Posted: Sat Dec 11, 2004 11:14 am
by chunyi81
phongtran wrote:I still have problem with my code. it got WA. can anybody help me. Thanks you so much !!!
[pascal]
program problem_100 (input,output);
type
arr = array [1..1000000] of longint;
var
a : arr;

function compute(n : longint) : longint;
var count : longint;
begin
count := 1;
repeat
if n = 1 then
begin
compute := count;
exit;
end;
if odd(n) then
n := 3*n + 1
else
n := n div 2;
inc(count);
until false;
end;

function max_in(i,j : longint) : longint;
var max,k : longint;
begin
max := 0;
for k := i to j do
if max < a[k] then
max := a[k];
max_in := max;
end;

procedure solve;
var i,j,k : longint;
begin
fillchar(a,sizeof(a),0);
repeat
readln(i,j);
for k := i to j do
if a[k] = 0 then
a[k] := compute(k);
k := max_in(i,j);
writeln(i,#32,j,#32,k);
until eof;
end;

begin
solve;
end.
[/pascal]
i can be greater than j, handle that in your code and your code should work fine. Next time check through your code and the forum for threads related for your problem first.

Posted: Mon Dec 20, 2004 7:20 pm
by Niaz
Sohel, Congratulations here for your recent result in International and National Programming Contests.
6th in ICPC 2004
3rd in NCPC 2004

Niaz

Posted: Wed Dec 29, 2004 1:48 am
by blank3
Hi ppl!

I cant figure out, what have I done wrong. If I paste the test input:

1 10
100 200
201 210
900 1000

I always have to press <ENTER> to process the last input. Ideas appreciated!

Code: Select all

import java.io.*;
import java.util.*;

class Main {
	void Begin () {
		String in;
		int p, q, i;
		boolean Reversed;
		
		while ((in= ReadLn(20)) != null) {
			Reversed= false;
			
			i= in.indexOf(' ');
			p= Integer.parseInt(in.substring(0, i));
			q= Integer.parseInt(in.substring(++i, in.length()));
			
			if (p > q) {
				int tmp= q;
				q= p;
				p= tmp;
				Reversed= true;
			}
			
			cycleLength(p, q, Reversed);
		}
	}
	
	static void cycleLength(int p, int q, boolean Reversed) {
		int MaxCycleLength= 0;
		int Count, n;
		
		for (int i= p; i<=q;i++) {
			Count= 1;
			n= i;
			
			while (n != 1) {
				if (n%2 == 1) {
					n= 3*n + 1;
				} else {
					n= n/2;
				}
				
				Count++;
			}
			
			if (Count > MaxCycleLength) {
				MaxCycleLength= Count;
			}
		}
		
		if (Reversed == false) {
			System.out.println(p+" "+q+" "+MaxCycleLength);
		} else {
			System.out.println(q+" "+p+" "+MaxCycleLength);
		}
	}

    static String ReadLn (int maxLg) {
        byte lin[] = new byte [maxLg];
        int lg = 0, car = -1;
        String line = "";

        try
        {
            while (lg < maxLg)
            {
                car = System.in.read();
                if ((car < 0) || (car == '\n')) break;
                lin [lg++] += car;
            }
        }
        catch (IOException e)
        {
            return (null);
        }

        if ((car < 0) && (lg == 0)) return (null);  // eof
        return (new String (lin, 0, lg));
    }

    public static void main (String args[])  // entry point from OS
    {
        Main myWork = new Main();  // create a dinamic instance
        myWork.Begin();
    }	
}

Posted: Sun Jan 02, 2005 4:10 pm
by QwertyKzk
T_T
I get WA, shy ((

Code: Select all

var N1,N2,solve1:longint;
function Solve(N,k:longint):longint;
var i,j,res:longint;
begin
   solve1:=0;
   FOR j:=n TO k DO
   begin
    i:=j;
    Res:=0;
     while i>1 do
     begin
          if odd(i) then i:=i*3+1
                    else I:=I div 2;
                    Inc(res);
     end;
     if res>solve1 then solve1:=res
   end;
result:=solve1;
end;
begin
 while not eof do
 begin
   read(N1);
   Read(n2);
   Write(N1,' ',N2,' ',Solve(n1,n2)+1);
 end;
end.
?????
I can't un derstand why ( ?

Posted: Sun Jan 02, 2005 4:18 pm
by QwertyKzk

Code: Select all

program problem_100;
var N1,N2,count,solve1:longint;
    mass1,mass2,mass3:array[1..100] of longint;
function Solve(N,k:longint):longint;
var i,j,res:longint;
begin
   solve1:=0;
   FOR j:=n TO k DO
   begin
    i:=j;
    Res:=0;
     while i>1 do
     begin
          if odd(i) then i:=i*3+1
                    else I:=I div 2;
                    Inc(res);
     end;
     if res>solve1 then solve1:=res
   end;
result:=solve1;
end;
begin
 count:=0;
 while not eof do
 begin
   inc(count);
   read(N1);
   Read(n2);
   mass1[count]:=N1;
   mass2[count]:=N2;
   mass1[count]:=Solve(n1,N2)+1;
 end;

 for N1:=1 to count do Write(mass1[n1],' ',mass2[n1],' ',mass3[n1]);
 Writeln;
end.
((((( Who can say, why WA?

Posted: Mon Jan 03, 2005 1:55 am
by Evan Tsang
QwertyKzk wrote:

Code: Select all

program problem_100;
var N1,N2,count,solve1:longint;
    mass1,mass2,mass3:array[1..100] of longint;
function Solve(N,k:longint):longint;
var i,j,res:longint;
begin
   solve1:=0;
   FOR j:=n TO k DO
   begin
    i:=j;
    Res:=0;
     while i>1 do
     begin
          if odd(i) then i:=i*3+1
                    else I:=I div 2;
                    Inc(res);
     end;
     if res>solve1 then solve1:=res
   end;
result:=solve1;
end;
begin
 count:=0;
 while not eof do
 begin
   inc(count);
   read(N1);
   Read(n2);
   mass1[count]:=N1;
   mass2[count]:=N2;
   mass1[count]:=Solve(n1,N2)+1;
 end;

 for N1:=1 to count do Write(mass1[n1],' ',mass2[n1],' ',mass3[n1]);
 Writeln;
end.
((((( Who can say, why WA?
Base on reading your code, I see 4 problems. I have not program in PASCAL for more than a decade though.

1. You never assign to mass3
2. You can only handle 100 cases
3. Don't memorize all the answer and print them out at the end
4. n1 > n2 is not handle

Posted: Mon Jan 03, 2005 10:29 am
by QwertyKzk

Code: Select all

program p100;
var N1,N2,count,solve1:longint; 
    mass1,mass2,mass3:array[1..1000000] of longint; 
function Solve(N,k:longint):longint; 
var i,j,res:longint; 
begin 
   solve1:=0;
 if N<K then
 Begin
   FOR j:=n TO k DO
   begin
    i:=j;
    Res:=0;
     while i>1 do
     begin
          if odd(i) then i:=i*3+1
                    else I:=I div 2;
                    Inc(res);
     end;
     if res>solve1 then solve1:=res
   end;
 End
 else
 Begin
   FOR j:=k TO n DO
   begin
    i:=j;
    Res:=0;
     while i>1 do
     begin
          if odd(i) then i:=i*3+1
                    else I:=I div 2;
                    Inc(res);
     end;
     if res>solve1 then solve1:=res
   end;

 End;
result:=solve1;
end; 
begin 
 count:=0; 
 while not eof do 
 begin 
   inc(count); 
   read(N1); 
   Read(n2); 
   mass1[count]:=N1; 
   mass2[count]:=N2; 
   mass3[count]:=Solve(n1,N2)+1; 
 end;

 for N1:=1 to count do 
  begin
    Write(mass1[n1],' ',mass2[n1],' ',mass3[n1]);
    Writeln;
  end;
end.
Thanks for the previous answer.
I have corrected some mistakes, but all equal does not work. In what there can be a problem? For earlier many thanks!

100

Posted: Sat Jan 08, 2005 9:20 pm
by enochcheng
What's wrong with it?
thx

#include "stdio.h"
main()
{
int i,n,start,end,c,max;
while(scanf("%d%d",&start,&end)==2)
{
max=0;
for(i=start;i<=end;i++)
{
n=i;
c=0;
while(1)
{
c++;
if(n==1)
break;
if(n%2==1)
n=3*n+1;
else
n/=2;
}
if(c>max)
max=c;
}
printf("%d %d %d\n",start,end,max);
}
}

start and end

Posted: Sat Jan 08, 2005 11:37 pm
by neowarez
I think your only problem is to assume that start<end ..

For each pair of input integers i and j you should output i, j, and the maximum cycle length for integers between and including i and j.

I hope this help you.

Posted: Sun Jan 09, 2005 7:35 am
by enochcheng
fixed
thx a lot

Posted: Sun Jan 23, 2005 2:06 pm
by skw
could anyone find the mistakes in my code please? I ran it through and it seems to work just fine, but keep getting WA. Thank you!

Code: Select all

import java.io.FileInputStream;
import java.io.InputStream;
import java.io.IOException;

import java.util.StringTokenizer;

interface MyReader {
    String readLine () throws IOException;}

final class MyBufferedReader implements MyReader {
    private InputStream in;

    public MyBufferedReader (InputStream in) {
        this.in = in;}

    public String readLine () throws IOException {
        final StringBuffer s = new StringBuffer(255);
        int i = 0;
        while (((i = in.read()) != '\n') && (i != -1))
            if (i != '\r')
                s.append((char) i);
        if (i == -1)
            return null;
        return s.toString();}}

 final class Main {
    static int eval (int i, int j) {
        int max = 0, temp = 0;
        if(j<i)
        {
        	temp = i;
        	i = j;
        	j = temp;
        	temp = 0;
        }
        for(int x = i - 1; x <= j; x++)
        { 	
        	temp = cyclelength(x);
        	if (max < temp)
        	max = temp;
        }
        return max;}
    static int cyclelength(int i)
    {
    int cycle = 1;
    while(i != 1)
    {	
    	if(i%2 == 1)
    	{
    		i=3*i+1;
    		cycle++;
    	}	
    	if(i%2 == 0)
    	{
    		i = i/2;
    		cycle++;
    	}
    }
    return cycle;
    }
    static void main (String[] args) {
        try {
            MyReader in = new MyBufferedReader(System.in);
            String   s;
            while ((s = in.readLine()) != null) {
                StringTokenizer st = new StringTokenizer(s);
                int i = Integer.parseInt(st.nextToken());
                int j = Integer.parseInt(st.nextToken());
                System.out.println(i + " " + j + " " + eval(i, j));}}
        catch (IOException e) {
            e.printStackTrace();}}}

Time out on problem 100

Posted: Thu Jan 27, 2005 10:09 pm
by jared_grau
I cannot for the life of me figure out how i am getting a time out
I have tried long and ints and done this recursively and iteratively
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.IOException;

import java.util.StringTokenizer;

interface MyReader {
String readLine () throws IOException;}

final class MyBufferedReader implements MyReader {
private InputStream in;

public MyBufferedReader (InputStream in) {
this.in = in;}

public String readLine () throws IOException {
final StringBuffer s = new StringBuffer(255);
int i = 0;
while (((i = in.read()) != '\n') && (i != -1))
if (i != '\r')
s.append((char) i);
if (i == -1)
return null;
return s.toString();}}

final class Main {
public static long eval(long m, long n)
{
long big=0;
if(m<=n)
{
for(long t=m;t<=n;t++)
{
long todo=help(t);
if(todo>big)
big=todo;
}
}
else
{
for(long t=n;t<=m;t++)
{
long todo=help(t);
if(todo>big)
big=todo;
}
}
return big;
}
public static long help (long i) {
int cycle=1;
while(i!=1)
{
if(i%2==1)
{
i=3*i+1;
cycle++;}
else
{
i=i/2;
cycle++;
}
}
return cycle;
}


public static void main (String[] args) {
try {
MyReader in = new MyBufferedReader(System.in);
/*
MyReader in = new MyBufferedReader(new FileInputStream("main.in"));
*/
String s;
while ((s = in.readLine()) != null) {
StringTokenizer st = new StringTokenizer(s);
int i = Integer.parseInt(st.nextToken());
int j = Integer.parseInt(st.nextToken());
System.out.println(i + " " + j + " " + eval(i, j));}}
catch (IOException e) {
e.printStackTrace();}}}