Ranking (as of 2015-09-15): 1 out of 275
Language: C++
/*
UVa 11660 - Look-and-Say sequences
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_11660_Look_and_Say_sequences.cpp
*/
#include <algorithm>
#include <cstdio>
using namespace std;
const int i_max = 1000;
void look_and_say_sequence(const char* s, char* t)
{
int ctr = 1;
char d = *s++;
char* u = t;
for ( ; *s; s++) {
if (*s != d) {
*t++ = ctr + '0';
*t++ = d;
if (t - u >= i_max) {
*t = '\0';
return;
}
ctr = 1;
d = *s;
}
else
ctr++;
}
*t++ = ctr + '0';
*t++ = d;
*t = '\0';
}
int main()
{
while (true) {
int i, j;
char s[i_max + 1], t[i_max + 1];
scanf("%s %d %d", s, &i, &j);
if (s[0] == '0' && !i && !j)
break;
char *p = s, *q = t;
for (int k = 1; k < i; k++) {
look_and_say_sequence(p, q);
swap(p, q);
#ifdef DEBUG
printf("%s\n", p);
#endif
}
printf("%c\n", *(p + j - 1));
}
return 0;
}
No comments:
Post a Comment