RECIPE - Editorial

cook04
easy
editorial
recipe

#1

PROBLEM LINKS

Practice
Contest

DIFFICULTY

EASY

EXPLANATION

The problem here is divide all numbers by some constant so that the divisions have no remainder. We produce the smallest result by dividing by a number that is as large as possible, that is the greatest common divisor. The greatest common divisor can be computed efficiently by Euclid’s algorithm, but in this case it was fast enough to simply check all numbers from 1 to 1000 for divisibility.

SETTER’S SOLUTION

Can be found here.

TESTER’S SOLUTION

Can be found here.


#2

wats wrong wid this??
http://www.codechef.com/viewsolution/1653380


#3

note on my code: the gcd block is taken from wiki url i have shown above. and main block is my c++ code. i initialised arr of 50 ingredients and saved ingredients in it. and then i have taken cmmn - the greatest common divisor for ingredients in the array. if cmmn==1 then the array has no gcd, so i just printed out the arr itself. if cmmn is equal to ingredients of arr then yes==1, which means that all ingredients in the arr are same numbers, for ex 4 as given in the codechef sample output, if so i printed out 1 for every ingredient of arr. and if there exist gcd(here cmmn) other than 1 and ingredints itself, then print out arr*/cmmn. that is it.

NOTE: i still have difficulty in understanding the binary gcd algo. can anyone pls post the easier way to learn binary gcd algo. tnx


#4

Can anyone tell me what is wrong with this code?
ideone


#5

Can anyone please tell me :-
I have run my code several times in my laptop with several cases and does not encountered any problem.But after submitting it I got wrong answer… Please Check my code and please inform me about my mistake and the particular case … Waiting for your reply… http://www.codechef.com/viewsolution/7242074


#6

@kislaya
Why did u write so lengthy code.

U can exploit the fact that GCD cannot be greater than the minimum element of array.


#7

showing runtime error SIGFPE in this problem … please can someone tell my mistake in this code…

https://www.codechef.com/viewsolution/7563648


#8

If someone can help me figuring out what the problem is https://www.codechef.com/viewsolution/9210591


#9

what is wrong with my code??
my ans is correct but still it is showing wrong answer

#include <stdio.h>

int main(void) {

int n,i=0,j,min=0,count=0,m,k,gcd;

scanf("%d",&n);

int a[n][49],b[50];

while(i<n)
{
	gcd=0;
	scanf("%d",&m);
	j=0;
	a*[j]=m;

	scanf("%d",&b[j]);
	min=b[j];
	j++;

		
	while(j<m)
	{
		scanf("%d",&b[j]);
		if(min>b[j])
		min=b[j];
		j++;
	}
	
	while(min>1)
	{
		count=0;
		j=0;
		while(j<m)
		{
			if((b[j]%min)==0)
			count++;
			j++;
		}

		if(count==m)
		{
			gcd=min;
			break;
		}
		min--;
		
	}
	
	j=1;
	k=0;
	if(gcd!=0)
	{
		while(j<=m)
		{
			a*[j]=b[k]/gcd;
			j++;
			k++;
		}
	}
	else
	{
		while(j<=m)
		{
			a*[j]=b[k];
			j++;
			k++;
		}
	}
	i++;
	
	count=0;
}

for(i=0;i<n;i++)
{
	for(j=1;j<=a*[0];j++)
	{
	    if(j==a*[0])
	    printf("%d",a*[j]);
	    else
	    printf("%d ",a*[j]);
	}
	if(i!=(n-1))
	printf("

");
}

return(0);

}


#10

my code is giving correct answers but in uploadinong your compiler is saying wrong plasee check it or tell me the example which is giving wrong answer
#include <stdio.h>
#include <stdlib.h>
void input(void);
int main()
{
int n,i;
printf(“enter the number the test case
“);
scanf(”%d”,&n);
for (i=0;i<n;i++)
{
input();
}

return 0;

}

void input(void)
{
int i,n,b,a[50];
int j=0,count=0 ;
printf(“enter the number of items between 2 to 50 :”);
scanf("%d",&n);
printf(“enter the numbers “);
for(i=0;i<n;i++)
{
scanf(”%d”,&a*);
if(i==0)
{
b=a[0];
}
if(i>0)
{
if(b>a*)
b=a*;
}
}
for(i=0;i<n;i++)
{
while(1)
{
j++;
if(bj<=a)
{
if(bj==a)
break;
}
if(bj>a)
{
for(i=0;i<n;i++)
printf("%d ",a*);
count ++;
break;
}
}
if (count==1)
break;

}
         if(count==0)
        {
            for(i=0;i<n;i++)
            printf("%d   ",a*/b);
        }

}


#11

my code is giving correct answers but when i am uploading in your compiler its saying wrong answer please check it or tell me the example which is giving wrong answer

https://www.codechef.com/viewsolution/12103516


#12

what wrong with my code???

#include <stdio.h>
#include <stdlib.h>

int minimum(int [],int);

int minimum(int arr[],int N){

    int i=0,min_val=arr[0];
    for(i=1;i<N-1;i++){
        if(min_val > arr*)
            min_val=arr*;
    }
        return min_val;

}

int main()
{
int T;

scanf("%d",&T);

while(T){
    int N,flag;
    scanf("%d",&N);
    if(N>=2 && N<=50){
    int arr[N],min,tem=N;
    int i=0;
    while(tem){
        scanf("%d",&arr*);
        tem--;  i++;
    }

    min=minimum(arr,N);
           tem=N;
    while(tem){
        if(((arr[tem-1])%min)==0) flag=1;
        else {flag=0; break;}
    tem--;
    }
    i=0;
    if(flag==1){
        while(N){
            printf("%d ",arr*/min);
         i++;N--;}
    }
    else{
            while(N){
                printf("%d ",arr*);
                i++; N--; }
    } }

T–;

printf("
");

}
return 0;
}


#13

@alphazeta0

Your code fails for this test case-

Input-
    1
    3 15 35 55

Output-

15 35 55 

Expected Output-

3 7 11

Add a check that if minimum element isn’t gcd, check if any factor of it is GCD of all. (Eg, here 15 isn’t GCD, but its factor 5 is GCD of all elements).


#14

what’s wrong with my code?it’s running correctly on my compiler but giving prompt of wrong answer here.plz check .
https://www.codechef.com/viewsolution/13565846


#15

Hi, can someone please help me find the test case where my code fails for this problem?
Here is my answer :
https://www.codechef.com/viewsolution/15469463


#16

My code is running correctly but don’t know why it’s showing wrong answer. Anyone please help?
https://www.codechef.com/viewsolution/15887411


#17

Can someone tell me whats wrong in my code…!!!

`
code here

import java.util.Scanner;

public class RECIPE_2 {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	Scanner sc = new Scanner(System.in);
	int T = sc.nextInt();
	while(T>0){
		int ingredients = sc.nextInt();
		if(ingredients == 0) return;
		if(ingredients == 1){
			System.out.println(sc.next());
			return;
		}
		int[]arr = new int[ingredients];
		for(int i=0;i<ingredients;i++){
			arr* = sc.nextInt();
		}
		//answer
		int result = gcd(arr[0], arr[1]);
		for(int i=2;i<ingredients;i++){
			result = gcd(arr*, result);
		}
		printArray(arr, result);
		
		T--;
	}

}

public static int gcd(int a, int b){
	if(a==0){
		return b;
	}else{
		return gcd(b%a, a);
	}
}

public static void printArray(int[] arr, int divNo){
	for(int i=0;i<arr.length; i++){
		System.out.print(arr*/divNo);
		if(i!=arr.length-1)
		System.out.print(" ");
	}
}

}
`
I solved this code in another way but still it is failing. anyone what is the case when it got failed.?


#18

Why i am getting WA(wrong answer) ??

I am getting right answers for all the TEST cases, incuding (8,16,20) ans=(2,4,5).Given in comment.
Can anyone help me.

My solution link
https://www.codechef.com/viewsolution/16701304

@grayhathacker


#19

#include<stdio.h>
int main()
{
int t,n,i,j,k,m,a[1000],s[1000],gcd;
scanf("%d",&t);
if(t<=100)
{
for(i=1;i<=t;i++)
{
scanf("%d",&n);
if(n>=2&&n<=50)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[j]);
}
}
gcd=a[0];
for(k=1;k<n;k++)
{
if(a[k]%gcd==0)
{
k++;
}
else{
gcd=a[k]%gcd;
}
}
for(m=0;m<n;m++)
{
s[m]=a[m]/gcd;
printf("%d
",s[m]);
}

}

}
return 0;
}

please tell me what is wrong with my code it’s working on my system but when I submit it show me wrong answer


#20

#include<stdio.h>
int main()
{
int t,n,i,j,k,m,a[1000],s[1000],gcd;
scanf("%d",&t);
if(t<=100)
{
for(i=1;i<=t;i++)
{
scanf("%d",&n);
if(n>=2&&n<=50)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[j]);
}
}
gcd=a[0];
for(k=1;k<n;k++)
{
if(a[k]%gcd==0)
{
k++;
}
else{
gcd=a[k]%gcd;
}
}
for(m=0;m<n;m++)
{
s[m]=a[m]/gcd;
printf("%d
",s[m]);
}

}

}
return 0;
}

please tell me what is wrong with my code it’s working on my system but when I submit it show me wrong answer