Ranking (as of 2013-12-21): 65 out of 592
Language: C++
/*
UVa 139 - Telephone Tangles
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_139_Telephone_Tangles.cpp
*/
#include <vector>
#include <cstdio>
#include <cstring>
using namespace std;
const int nr_chars_number = 15, nr_chars_locality = 25, nr_chars_max = 1023;
struct telephone_code {
int code_length_;
char code_[nr_chars_number + 1];
char locality_[nr_chars_locality + 1];
double cost_;
};
int main()
{
vector<telephone_code> telephone_codes;
while (true) {
char s[nr_chars_max + 1];
gets(s);
if (!strcmp(s, "000000"))
break;
telephone_code tc;
char* p = strchr(s, ' ');
*p++ = '\0';
strcpy(tc.code_, s);
tc.code_length_ = strlen(tc.code_);
char *q = strchr(p, '$');
*q++ = '\0';
strcpy(tc.locality_, p);
sscanf(q, "%lf", &tc.cost_);
tc.cost_ /= 100.0;
telephone_codes.push_back(tc);
}
int nr_tc_codes = static_cast<int>(telephone_codes.size());
while (true) {
char number[nr_chars_number + 1];
scanf("%s", number);
if (number[0] == '#')
break;
int duration;
scanf("%d", &duration);
int tci = -1;
if (number[0] == '0') {
for (tci = 0; tci < nr_tc_codes; tci++)
if (!strncmp(number, telephone_codes[tci].code_,
telephone_codes[tci].code_length_)) {
int length = strlen(&number[telephone_codes[tci].code_length_]);
if (length < 4)
continue;
if (telephone_codes[tci].code_[1] == '0') { // IDD
if (length <= 10)
break;
}
else { // STD
if (length <= 7)
break;
}
}
}
if (tci == -1)
printf("%-15s %-5s%30s%5d%6.2lf%7.2lf\n",
number, "Local", number, duration, 0.0, 0.0);
else if (tci < nr_tc_codes)
printf("%-15s %-25s%10s%5d%6.2lf%7.2lf\n",
number, telephone_codes[tci].locality_,
&number[telephone_codes[tci].code_length_], duration,
telephone_codes[tci].cost_, telephone_codes[tci].cost_ * duration);
else
printf("%-15s %-35s%5d%13.2lf\n", number, "Unknown", duration, -1.0);
}
return 0;
}
No comments:
Post a Comment