HackerEarth Chocolate distribution problem solution YASH PAL, 31 July 2024 In this HackerEarth Chocolate distribution problem solution There are N people standing in a row with some counti (1 <=i <= N) a number of chocolates in their hands. You have to select a range of people and take all their chocolates with the condition that you should be able to distribute those chocolates equally among M boxes.Write a program to determine the maximum number of chocolates that can be placed in a box.HackerEarth Chocolate distribution problem solution.#include <bits/stdc++.h>#define MAX 100005using namespace std;long long int last_modulo[MAX];int main(){ int testcase ; scanf("%d" , &testcase); int arr[MAX]; long long int ans = 0; while(testcase--) { ans = 0; int n , m ; scanf("%d %d" , &n , &m); memset( last_modulo , -1 , sizeof(last_modulo) ); last_modulo[0] = 0; for( int i = 0 ; i < n ; i++ ) scanf("%d" , &arr[i] ); long long int sum = 0; for( int i = 0 ; i < n ; i++ ) { sum += arr[i]; int tmp = sum % m ; if( last_modulo[ tmp ] == -1 ) { last_modulo[tmp] = sum ; } else { ans = max( ans , sum - last_modulo[tmp] ); } } printf("%dn",ans / m ); } return 0;}Second solution#include <bits/stdc++.h>using namespace std;#define bug() printf("BUGn")#define bug1(n) printf("bg1 %dn",n)#define bug2(a,b) printf("bg2 %d %dn",a,b)#define MOD 1000000007#define ll long long#define vi vector< int >#define vll vector< long long >#define vvi vector< vector< int > >#define vvll vector< vector< long long > >#define pi pair< int, int >#define pll pair< long long, long long >#define vpi vector< pair< int, int > >#define vpll vector< pair< long long, long long > >#define pb(n) push_back(n)#define mp(a,b) make_pair(a,b)#define printA(a,n) for(int i = 0;i < n;++i) cout<<a[i]<<" "; cout<<endl;int main(){ int t; scanf("%d",&t); assert(t >= 1 && t <= 1000); ll ns = 0; while(t--) { ll n,m; scanf("%lld %lld",&n,&m); ns += n; assert(n >= 1 && n <= 100000); assert(m >= 1 && m <= 100000); ll a[n+1],sum = 0; ll mods[n+1],sums[n+1]; ll firsts[100005]={0},lasts[100005]={0}; a[0] = 0; mods[0] = 0; sums[0] = 0; for (int i = 1; i <= n; ++i) { scanf("%lld",&a[i]); assert(a[i] >= 0 && a[i] <= 100000); sum += a[i]; sums[i] = sum; mods[i] = sum%m; if (mods[i] == 0) { lasts[0] = i; } else if(firsts[mods[i]] == 0) { firsts[mods[i]] = i; lasts[mods[i]] = i; } else { lasts[mods[i]] = i; } } if(sum < m) { printf("0n"); continue; } if(sum%m == 0) { printf("%lldn", sum/m); continue; } ll ans = 0,temp; for (int i = 0; i < m; ++i) { temp = (sums[lasts[i]] - sums[firsts[i]])/m; if (temp > ans) { ans = temp; } } printf("%lldn", ans); } assert(ns <= 10000000); return 0;} coding problems solutions