Ranking (as of 2013-09-23): 19 out of 775
Language: C++
/*
UVa 245 - Uncompress
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_245_Uncompress.cpp
*/
#include <iostream>
#include <string>
#include <vector>
#include <cstring>
#include <cctype>
using namespace std;
int main()
{
int n = 0; // number of words
vector<char*> words; // word list
while (true) {
string s;
getline(cin, s);
if (s[0] == '0')
break;
for (const char *p = s.c_str(), *q = s.c_str(); ; ) {
if (isdigit(*p)) {
int i = *p - '0';
for (p++; isdigit(*p); p++) {
i *= 10;
i += *p - '0';
}
q = p;
i--;
char* r = words[n - 1 - i];
cout << r;
// move the word to the back of the list
memmove(&words[n - 1 - i], &words[n - i], sizeof(char*) * i);
words[n - 1] = r;
}
else {
if (*p)
cout << *p;
if (isalpha(*p))
p++;
else {
if (p - q) {
// add a word at the back of the list
char* t = new char[p - q + 1];
memcpy(t, q, p - q);
*(t + (p - q)) = '\0';
words.push_back(strdup(t));
n++;
q = p;
}
if (*p) {
p++; q++;
}
else // end of line
break;
}
}
}
cout << endl;
}
return 0;
}
No comments:
Post a Comment