Minimum number of mails required to distribute all the questions
Last Updated :
11 Jul, 2025
Given N questions in a test and K students in the class. Out of the batch of K students, N students memorised exactly one question each. A mail can contain about a maximum of X questions.
Find the minimum number of mails required so that the entire class gets to know about all the questions.
NOTE: A mail has the following information- Name of sender, Name of the recipient and the question(s)
Examples:
Input: N = 3, K = 3, X = 1
Output: 6
Student 1 sends his question to student 2 and student 3 (2 mails),
so does student 2 and student 3 so total mails = 2 * 3 = 6
Input: N = 4, K = 9, X = 2
Output: 19
Refer to the flowchart below
Flowchart:
N = 4, K = 9, X = 2
Pivot = 4th Student
Student 1, 2, & 3 sends 3 mails to student 4. Now student 4 has all the questions. He distributes them accordingly, 3/2 = 2(using ceil) mails to each 3 students who already has 1 question and 4/2 = 2 mails to rest 5 students. So total mails are (3 + 2 * 3 + 2 * 5) = 19
Approach: A greedy approach has been used here. A pivot is selected which receives all the questions first and then distribute them accordingly. This will take a minimum number of steps. N-1 students, send each of their questions to the Nth student. So the Nth student has all the questions, (mails sent till now = N-1). Now it is mentioned that the mails contain the name of senders, so the Nth student knows which question came from whom, thus he can avoid sending back the same question. Now the Nth student acts as the distributor, he packages the questions and sends them accordingly. Each of the N-1 students needs to know about the rest of N-1 questions. So minimum mails that needs to be sent to each of them is ceil((N-1)/X), where X is the maximum number of questions a mail can hold and ceil denotes least integer function. So total mails sent till now = ceil((N-1)/X) * (N-1) + (N-1). So N students know about all the questions. The rest of the K-N students needs to know about all the N questions, so each of them must receive atleast ceil(N/X) mails, where X is the maximum number of questions a mail can hold and ceil denotes least integer function. So total mail received is:
ceil(N/X) * (K-N) + (( ceil((N-1)/X)) * (N-1)) + (N-1)
Below is the implementation of the above approach:
C++
// C++ code to find the
// minimum number of mails
#include <bits/stdc++.h>
#define ll long long int
using namespace std;
// Function returns the min no of mails required
long long int MinimumMail(int n, int k, int x)
{
// Using the formula derived above
ll m = (n - 1) + (ll)ceil((n - 1) * 1.0 / x) * (n - 1)
+ (ll)ceil(n * 1.0 / x) * (k - n);
return m;
}
// Driver Code
int main()
{
// no of questions
int N = 4;
// no of students
int K = 9;
// maximum no of questions a mail can hold
int X = 2;
// Calling function
cout << MinimumMail(N, K, X) << endl;
return 0;
}
Java
// Java code to find the
// minimum number of mails
import java.io.*;
import java.util.*;
import java.lang.*;
class GFG
{
// Function returns the min
// no of mails required
static double MinimumMail(int n,
int k,
int x)
{
// Using the formula
// derived above
double m = (n - 1) + Math.ceil((n - 1) * 1.0 / x) * (n - 1)
+ Math.ceil(n * 1.0 / x) * (k - n);
return m;
}
// Driver Code
public static void main(String[] args)
{
// no of questions
int N = 4;
// no of students
int K = 9;
// maximum no of questions
// a mail can hold
int X = 2;
// Calling function
System.out.print((int)MinimumMail(N, K, X) + "\n");
}
}
Python3
# Python3 code to find the minimum
# number of mails
import math
# Function returns the min no of
# mails required
def MinimumMail(n, k, x):
# Using the formula derived above
m = ((n - 1) + int(math.ceil((n - 1) * 1.0 / x) *
(n - 1) + math.ceil(n * 1.0 / x) * (k - n)));
return m;
# Driver Code
# no of questions
N = 4;
# no of students
K = 9;
# maximum no of questions
# a mail can hold
X = 2;
# Calling function
print(MinimumMail(N, K, X));
# This code is contributed by mits
C#
// C# code to find the
// minimum number of mails
using System;
class GFG
{
// Function returns the min
// no of mails required
static double MinimumMail(int n,
int k,
int x)
{
// Using the formula
// derived above
double m = (n - 1) + Math.Ceiling((n - 1) *
1.0 / x) * (n - 1) +
Math.Ceiling(n * 1.0 /
x) * (k - n);
return m;
}
// Driver Code
public static void Main()
{
// no of questions
int N = 4;
// no of students
int K = 9;
// maximum no of questions
// a mail can hold
int X = 2;
// Calling function
Console.WriteLine((int)MinimumMail(N, K, X) + "\n");
}
}
// This code is contributed by anuj_67.
PHP
<?php
// PHP code to find the
// minimum number of mails
// Function returns the
// min no of mails required
function MinimumMail($n, $k, $x)
{
// Using the formula
// derived above
$m = ($n - 1) + ceil(($n - 1) *
1.0 / $x) * ($n - 1) +
ceil($n * 1.0 /
$x) * ($k - $n);
return $m;
}
// Driver Code
// no of questions
$N = 4;
// no of students
$K = 9;
// maximum no of questions
// a mail can hold
$X = 2;
// Calling function
echo MinimumMail($N, $K, $X), "\n";
// This code is contributed by ajit
?>
JavaScript
<script>
// Javascript code to find the minimum
// number of mails
// Function returns the min
// no of mails required
function MinimumMail(n, k, x)
{
// Using the formula
// derived above
let m = (n - 1) + Math.ceil((n - 1) * 1.0 / x) *
(n - 1) + Math.ceil(n * 1.0 / x) * (k - n);
return m;
}
// Driver code
// No of questions
let N = 4;
// No of students
let K = 9;
// Maximum no of questions
// a mail can hold
let X = 2;
// Calling function
document.write(MinimumMail(N, K, X) + "</br>");
// This code is contributed by divyesh072019
</script>
Similar Reads
Minimum number of items to be delivered Given N buckets, each containing A[i] items. Given K tours within which all of the items are needed to be delivered. It is allowed to take items from only one bucket in 1 tour. The task is to tell the minimum number of items needed to be delivered per tour so that all of the items can be delivered w
14 min read
Minimum number of items to be delivered Given N buckets, each containing A[i] items. Given K tours within which all of the items are needed to be delivered. It is allowed to take items from only one bucket in 1 tour. The task is to tell the minimum number of items needed to be delivered per tour so that all of the items can be delivered w
14 min read
Minimum time required to schedule K processes Content Removed.
1 min read
Allocate minimum number of pages (Non Consecutive) Given the number of pages in N different books and M students. Every student is assigned to read some books that can be consecutive or non-consecutive. The task is to assign books so that the maximum number of pages assigned to a student is minimum. Examples: Input: pages = {8, 15, 10, 20, 8}, M = 2
7 min read
Distributing items when a person cannot take more than two items of same type Given N sweets, which can be of many different types, and k customers, one customer wonât make the same type of sweet more than 2 pieces, the task is to find if it is possible to distribute all, then print "Yes" or otherwise "No".Given an array, arr[] represents an array of sweets. arr[i] is type of
8 min read
Maximum and Minimum apples distribution limits Given an integer N representing a number of apples and an array weights[] consisting weight of these apples. Distribute them to K people such that they receive equal-weighing apples. Each person must receive at least one apple. Cutting an apple in half is restricted, the task is to print the maximum
11 min read