 CAKEWALK

# PREREQUISITES:

Basic knowledge of arrays and loops.

# PROBLEM:

The program asks you to calculate if all the elephants would get the number of candies that they want.

# EXPLANATION:

If there are C candies in all, and elephant i needs A* candies, then it is possible to serve all the elephants only if there are enough candies available, i.e. the following condition must be satisfied:

C >= A + A[`1`] + … + A[N-1]

This means you can have a simple loop over the array A to count the sum of the required number of candies by the elephants and then finally comparing it with C to determine the answer. If the above condition is satisfied, answer will be Yes, else the answer will be No (they have to be case-sensitive to avoid WA).

# SETTER'S SOLUTION:

Can be found here.

## APPROACH:

The problem setter used the above solution to solve the problem.

# TESTER'S SOLUTION:

Can be found here.

## APPROACH:

The problem tester used the above solution to solve the problem.
15 Likes

#include <stdio.h>

int main(){

int t,n,i,j;
int A;
long long int c;
scanf("%d",&t);
for(i=0;i<t;i++){
scanf("%d",&n);
scanf("%lli",&c);
for(j=0;j<n;j++){
scanf("%d",&A[j]);
c=c-A[j];
}
if(c<0){
printf("No
");
}
else{
printf("Yes
");
}

}
return 0;
}

int main()
{
int t=0;
cin >> t;
while(t–){
unsigned int n=0,c=0,i,a, total=0;
cin >> n >>c;
for(i=0;i<n;i++){
cin>>a*;
total=total+a*;
}
if(total<=c)
cout<<"Yes
";
else
cout<<"No
";
}
return 0;
}

1 Like

#include <stdio.h>

int main(){
int arr = {1,2,3 } ; //elephants

int candies = {2,2,1 } ; //candies

int i ;

int x;
x = &arr
;
int y;
y = &candies
;

for(i=0; i<=2; i++ ) {
if (candies[ i ] >= arr[ i ]) {
printf("yes "); }
else
printf("no ");

}
}

/*
i guess my approach is correct. how can i improve my code? */

#include<stdio.h>
int main()
{

``````int i,T,ii;
scanf("%d",&T);
for(i=0;i<T;i++)        //for test cases
{   int C,N;
scanf("%d %d",&N,&C);
int E[N];
for(ii=0;ii<N;ii++)            //assigning candies to elephants
{

scanf("%d",&E[ii]);
if(C>=ii)               //for assign only grater or equal index number candy to elephant
{
C=C-E[ii];
}
else {
C=-1;
}

}
if(C >=0)
printf("Yes");
else
printf("No");
}
return 0;
``````

}

import java.io.IOException;
import java.util.Scanner;

``````public class Main{

public static void main(String args[]){
lecandy();
}

public static void lecandy(){
//Scanner in = new Scanner(System.in);
try{
while(t>0){
//			int Ak[] = new int[N];
int sum = 0;
for(int i=0;i<N;i++){
//				Ak* = in.nextInt();
}
if(sum<=C){
System.out.println("Yes");
}else{
System.out.println( "No");
}
t--;
}
r.close();
}catch(IOException e){
e.printStackTrace();
}

//	in.close();
}
}``````

int sumOfCandies = 0;
for(int i=0;i<A.leght;i++){
sumOfCandies = A* + sumOfCandies;
}
if(C >= sumOfCandies){
System.out.println(“Yes”);
}
else{
System.out.println(“No”);
}

This is for giving inputs in single line in python

``````N, C = map(float, input().split())
``````

This is for giving inputs in a single line for list

``````A = []
A = map(float,input().split(' '))``````
1 Like

int main(){
int t,n,c,toffeesNeeded,temp;
cin >> t;
while(t–){
cin >> n >> c;
toffeesNeeded = 0;
for (int i = 0; i < n; ++i)
{
cin >> temp;
toffeesNeeded += temp;
if (toffeesNeeded > c)
{
cout << “No” << endl;
break;
}
}
if (toffeesNeeded <= c)
{
cout << “Yes” << endl;
}
}
return 0;
}

GIves WA. Can someone find the mistake?

i guess, you must put this part:

``````if (toffeesNeeded > c)
{
cout << "No" << endl;
break;
}
``````

outside loop and without break.

A common mistake of everyone who is getting “WA” in spite of correct logic is printing “YES” or “yes” instead of “Yes”.

import java.util.Scanner;

class LittleElephantsNCandy_LECANDY {

``````public static void main(String args[]){

Scanner sc = new Scanner(System.in);

int T = sc.nextInt();

while(T > 0){

int N = sc.nextInt();
long C = sc.nextLong();
String result = "Yes";

while(N > 0){

long k = sc.nextLong();

C -= k;

if(C < 0){
result = "No";
break;
}

N--;
}

System.out.println(result);
T--;
}
}
``````

}

I am getting WA. Can anyone explain why

2 Likes

public class Firstarray {

``````public static void main(String[] args) {
// TODO Auto-generated method stub

int i;

Scanner sc = new Scanner(System.in);
System.out.print("Enter the number of Candies = ");
int c=sc.nextInt();
System.out.print(c);
System.out.print("Enter the number of Elephant = ");
int n=sc.nextInt();
System.out.print(n);
int[] arr1= new int[n];
int l=arr1.length-1;
for(i=0;i<=arr1.length-1;i++)
{
arr1*=sc.nextInt();
}
if(c>=l )
System.out.println("true");
else
System.out.println("false");
``````

// System.out.println("Enter the number of Elephant = "+n);
// for(i=0;i<=A[n-1];i++)
// {
// if(c>=A[n-1])

``````	}

}``````

Hi,

What is the problem with the following code?

``````#include <iostream>
using namespace std;

int main()
{
int T;
cin >> T;
for (int i = 0; i < T; i++){
int N;
int C;
cin >> N >> C;
int sum = 0;

for (int k = 0; k < N; k++) {
int temp = 0;
cin >> temp;
sum += temp;
if (sum > C)
break;
}
if (sum > C)
cout << "No" << endl;
else
cout << "Yes" << endl;
}
return 0;
}
``````

If, I don’t use break statement within for loop, I get correct result. But, I couldn’t understand why using a break statement will alter the result.

durgesh

Hi,

What is the problem with the following code?

``````#include <iostream>
using namespace std;

int main()
{
int T;
cin >> T;
for (int i = 0; i < T; i++){
int N;
int C;
cin >> N >> C;
int sum = 0;

for (int k = 0; k < N; k++) {
int temp = 0;
cin >> temp;
sum += temp;
if (sum > C)
break;
}
if (sum > C)
cout << "No" << endl;
else
cout << "Yes" << endl;
}
return 0;
}
``````

If, I don’t use break statement within for loop, I get correct result. But, I couldn’t understand why using a break statement will alter the result.

durgesh

5TREYHHTRJ NHYHJKM JGM

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

``````struct AKList{
long int N;
long int C;
int *myList;
struct AKList *next;
};

int main(void){
int NoOfTestCases;
long int *NCArray = malloc(2 * sizeof(long int));
struct AKList *AKArray = malloc(sizeof(struct AKList));
struct AKList *AKArrayPtr = AKArray;
long int number;
long int sum = 0;

scanf("%d", &NoOfTestCases );
if(NoOfTestCases < 1 || NoOfTestCases > 1000) return -1;

for (int i = 0; i < NoOfTestCases; i++){
scanf("%ld", (NCArray) );
scanf("%ld", (NCArray+1) );
if((NCArray<1 || NCArray > 100 )||(NCArray < 1 || NCArray > 1000000000 )) return -1;
AKArrayPtr->myList = malloc(NCArray * sizeof(long int));
AKArrayPtr->N = NCArray;
AKArrayPtr->C = NCArray;

for(int k = 0; k < NCArray; k++){
scanf("%ld", &number);
if(number > 0 && number <= 10000){
AKArrayPtr->myList[k]= number;
}
}
AKArrayPtr->next = malloc(sizeof(struct AKList));
AKArrayPtr = AKArrayPtr->next;
}
AKArrayPtr->next = NULL;
AKArrayPtr = AKArray;
for(int i = 0; i < NoOfTestCases; i++){
sum = 0;
for(int i = 0; i < AKArrayPtr->N; i++){
sum += AKArrayPtr->myList*;
}
if(sum > AKArrayPtr->C){
printf("No
``````

");
}
else{
printf("Yes
");
}
AKArrayPtr = AKArrayPtr->next;
}

``}``

Actually there is no need of using array also we can simply add the values in sum variable and compare it with the number of candies if it is less or equal then answer is yes else no.  really nice, waiting for the next editorials 1 Like

This can’t be better!! 2 Likes