We use cookies to ensure you have the best browsing experience on our website. Please read our cookie policy for more information about how we use cookies.
/**
* Find a town by name.
*/
Town *find_town_by_name(Town towns[], int n, char *name) {
for (int i = 0; i < n; i++) {
if (strcmp(towns[i].name, name) == 0) {
return &towns[i];
}
}
return NULL;
}
/**
* Print all packages in a given town.
*/
void print_town_packages(Town *town) {
printf("%s:\n", town->name);
for (int i = 0; i < town->num_offices; i++) {
printf("\t%d:\n", i);
for (int j = 0; j < town->offices[i].num_packages; j++) {
printf("\t\t%s\n", town->offices[i].packages[j].id);
}
}
}
/**
* Transfer packages from one post office to another.
*/
void transfer_packages(PostOffice *src, PostOffice *dest) {
Package temp[MAX_PACKAGES];
int temp_count = 0, new_count = dest->num_packages;
// Process all packages
for (int i = 0; i < src->num_packages; i++) {
if (src->packages[i].weight >= dest->min_weight && src->packages[i].weight <= dest->max_weight) {
dest->packages[new_count++] = src->packages[i];
} else {
temp[temp_count++] = src->packages[i];
}
}
// Restore rejected packages to the source office
for (int i = 0; i < temp_count; i++) {
src->packages[i] = temp[i];
}
src->num_packages = temp_count;
dest->num_packages = new_count;
}
/**
* Find the town with the most packages.
*/
void find_most_packages_town(Town towns[], int n) {
int max_count = -1, max_index = -1;
for (int i = 0; i < n; i++) {
int total_packages = 0;
for (int j = 0; j < towns[i].num_offices; j++) {
total_packages += towns[i].offices[j].num_packages;
}
if (total_packages > max_count) {
max_count = total_packages;
max_index = i;
}
}
if (max_index != -1) {
printf("Town with the most number of packages is %s\n", towns[max_index].name);
}
}
/**
* Main function to read input and process queries.
*/
int main() {
int n;
if (scanf("%d", &n) != 1 || n < 1 || n > MAX_TOWNS) {
fprintf(stderr, "Invalid number of towns.\n");
return 1;
}
Town towns[MAX_TOWNS];
// Read town data
for (int i = 0; i < n; i++) {
if (scanf("%s", towns[i].name) != 1) return 1;
if (scanf("%d", &towns[i].num_offices) != 1 || towns[i].num_offices < 1 || towns[i].num_offices > MAX_OFFICES) {
return 1;
}
for (int j = 0; j < towns[i].num_offices; j++) {
PostOffice *office = &towns[i].offices[j];
if (scanf("%d %d %d", &office->num_packages, &office->min_weight, &office->max_weight) != 3) return 1;
if (office->num_packages < 0 || office->num_packages > MAX_PACKAGES) {
return 1;
}
for (int k = 0; k < office->num_packages; k++) {
if (scanf("%s %d", office->packages[k].id, &office->packages[k].weight) != 2) return 1;
}
}
}
int q;
if (scanf("%d", &q) != 1 || q < 1) {
fprintf(stderr, "Invalid number of queries.\n");
return 1;
}
// Process queries
for (int i = 0; i < q; i++) {
int query_type;
if (scanf("%d", &query_type) != 1) return 1;
if (query_type == 1) {
char town_name[MAX_NAME_LENGTH];
if (scanf("%s", town_name) != 1) return 1;
Town *town = find_town_by_name(towns, n, town_name);
if (town) print_town_packages(town);
} else if (query_type == 2) {
char town1[MAX_NAME_LENGTH], town2[MAX_NAME_LENGTH];
int index1, index2;
if (scanf("%s %d %s %d", town1, &index1, town2, &index2) != 4) return 1;
Town *src_town = find_town_by_name(towns, n, town1);
Town *dest_town = find_town_by_name(towns, n, town2);
if (src_town && dest_town && index1 < src_town->num_offices && index2 < dest_town->num_offices) {
transfer_packages(&src_town->offices[index1], &dest_town->offices[index2]);
}
} else if (query_type == 3) {
find_most_packages_town(towns, n);
}
}
return 0;
}
Cookie support is required to access HackerRank
Seems like cookies are disabled on this browser, please enable them to open this website
An unexpected error occurred. Please try reloading the page. If problem persists, please contact support@hackerrank.com
Post Transition
You are viewing a single comment's thread. Return to all comments →
In C language The solution is look like :
include
include
include
define MAX_TOWNS 50
define MAX_OFFICES 50
define MAX_PACKAGES 100
define MAX_NAME_LENGTH 32
define MAX_ID_LENGTH 16
typedef struct { char id[MAX_ID_LENGTH]; int weight; } Package;
typedef struct { int min_weight, max_weight; int num_packages; Package packages[MAX_PACKAGES]; } PostOffice;
typedef struct { char name[MAX_NAME_LENGTH]; int num_offices; PostOffice offices[MAX_OFFICES]; } Town;
/** * Find a town by name. */ Town *find_town_by_name(Town towns[], int n, char *name) { for (int i = 0; i < n; i++) { if (strcmp(towns[i].name, name) == 0) { return &towns[i]; } } return NULL; }
/** * Print all packages in a given town. */ void print_town_packages(Town *town) { printf("%s:\n", town->name); for (int i = 0; i < town->num_offices; i++) { printf("\t%d:\n", i); for (int j = 0; j < town->offices[i].num_packages; j++) { printf("\t\t%s\n", town->offices[i].packages[j].id); } } }
/** * Transfer packages from one post office to another. */ void transfer_packages(PostOffice *src, PostOffice *dest) { Package temp[MAX_PACKAGES]; int temp_count = 0, new_count = dest->num_packages;
}
/** * Find the town with the most packages. */ void find_most_packages_town(Town towns[], int n) { int max_count = -1, max_index = -1;
}
/** * Main function to read input and process queries. */ int main() { int n; if (scanf("%d", &n) != 1 || n < 1 || n > MAX_TOWNS) { fprintf(stderr, "Invalid number of towns.\n"); return 1; }
}