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.
#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX_STRING_LENGTH 6structpackage{char*id;intweight;};typedefstructpackagepackage;structpost_office{intmin_weight;intmax_weight;package*packages;intpackages_count;};typedefstructpost_officepost_office;structtown{char*name;post_office*offices;intoffices_count;};typedefstructtowntown;// (template_head) ----------------------------------------------------------------------voidprint_all_packages(consttown*t){printf("%s:\n",t->name);for(inti=0;i<t->offices_count;++i){printf("\t%d:\n",i);for(intj=0;j<t->offices[i].packages_count;++j){printf("\t\t%s\n",t->offices[i].packages[j].id);}}}voidsend_all_acceptable_packages(town*source,intsource_office_index,town*target,inttarget_office_index){post_office*src_po=source->offices+source_office_index;post_office*dst_po=target->offices+target_office_index;for(inti=0;i<src_po->packages_count;){package*p=src_po->packages+i;if(dst_po->min_weight<=p->weight&&p->weight<=dst_po->max_weight){// ok to send package p from src_po to dst_podst_po->packages=realloc(dst_po->packages,(dst_po->packages_count+1)*sizeof(package));dst_po->packages[dst_po->packages_count].id=p->id;// no need to reallocatedst_po->packages[dst_po->packages_count].weight=p->weight;dst_po->packages_count++;memmove(src_po->packages+i,src_po->packages+i+1,sizeof(package)*(src_po->packages_count-i-1));src_po->packages_count--;src_po->packages=realloc(src_po->packages,sizeof(package)*(src_po->packages_count));}else{++i;}}}towntown_with_most_packages(town*towns,inttowns_count){intmax_packages=0;intmax_i=0;for(inti=0;i<towns_count;++i){intpackages=0;for(intj=0;j<towns[i].offices_count;++j){packages+=towns[i].offices[j].packages_count;}if(packages>=max_packages){max_packages=packages;max_i=i;}}returntowns[max_i];}town*find_town(town*towns,inttowns_count,constchar*name){for(inti=0;i<towns_count;++i){if(strcmp(towns[i].name,name)==0){returntowns+i;}}returnNULL;}// (template_tail) ----------------------------------------------------------------------intmain(){inttowns_count;scanf("%d",&towns_count);town*towns=malloc(sizeof(town)*towns_count);for(inti=0;i<towns_count;i++){towns[i].name=malloc(sizeof(char)*MAX_STRING_LENGTH);scanf("%s",towns[i].name);scanf("%d",&towns[i].offices_count);towns[i].offices=malloc(sizeof(post_office)*towns[i].offices_count);for(intj=0;j<towns[i].offices_count;j++){scanf("%d%d%d",&towns[i].offices[j].packages_count,&towns[i].offices[j].min_weight,&towns[i].offices[j].max_weight);towns[i].offices[j].packages=malloc(sizeof(package)*towns[i].offices[j].packages_count);for(intk=0;k<towns[i].offices[j].packages_count;k++){towns[i].offices[j].packages[k].id=malloc(sizeof(char)*MAX_STRING_LENGTH);scanf("%s",towns[i].offices[j].packages[k].id);scanf("%d",&towns[i].offices[j].packages[k].weight);}}}intqueries;scanf("%d",&queries);chartown_name[MAX_STRING_LENGTH];while(queries--){inttype;scanf("%d",&type);fprintf(stderr,"QUERY: %d\n",type);switch(type){case1:scanf("%s",town_name);town*t=find_town(towns,towns_count,town_name);print_all_packages(t);break;case2:scanf("%s",town_name);town*source=find_town(towns,towns_count,town_name);intsource_index;scanf("%d",&source_index);scanf("%s",town_name);town*target=find_town(towns,towns_count,town_name);inttarget_index;scanf("%d",&target_index);send_all_acceptable_packages(source,source_index,target,target_index);break;case3:printf("Town with the most number of packages is %s\n",town_with_most_packages(towns,towns_count).name);break;}}return0;}
Cookie support is required to access HackerRank
Seems like cookies are disabled on this browser, please enable them to open this website
Post Transition
You are viewing a single comment's thread. Return to all comments →