Run Time: 0.460
Ranking (as of 2016-09-11): 92 out of 399
Language: C++
/* UVa 12526 - Cellphone Typing To build using Visual Studio 2012: cl -EHsc -O2 UVa_12526_Cellphone_Typing.cpp */ #include <algorithm> #include <cstdio> #include <cstring> using namespace std; const int N_max = 100000, nr_chars_max = 80; struct word { char s_[nr_chars_max + 1]; bool operator<(const word& w) const {return strcmp(s_, w.s_) < 0;} } words[N_max]; int typing(word& w, int i, int low, int high, int nr_typing) { if (low == high || !w.s_[i]) return nr_typing; char c = w.s_[i + 1]; w.s_[i + 1] = '\0'; int l = lower_bound(words + low, words + high, w) - words; w.s_[i]++; int h = lower_bound(words + low, words + high, w) - words; w.s_[i]--, w.s_[i + 1] = c; if (i && l == low && h == high) ; else nr_typing++; return typing(w, i + 1, l, h, nr_typing); } int main() { int N; while (scanf("%d", &N) != EOF) { for (int i = 0; i < N; i++) scanf("%s", words[i].s_); sort(words, words + N); int nr_typings = 0; for (int i = 0; i < N; i++) { word w; strcpy(w.s_, words[i].s_); int nr = typing(w, 0, 0, N, 0); #ifdef DEBUG printf("%s: %d\n", w.s_, nr); #endif nr_typings += nr; } printf("%.2lf\n", static_cast<double>(nr_typings) / N); } return 0; }
No comments:
Post a Comment