Ranking (as of 2013-07-20): 28 out of 915
Language: C++
/*
UVa 11988 - Broken Keyboard (a.k.a. Beiju Text)
To build using Visual Studio 2010:
cl -EHsc -O2 UVa_11988_Broken_Keyboard.cpp
*/
#include <cstdio>
const int nr_chars_max = 100000;
char s[nr_chars_max];
struct cnode { // doubly-linked list node
char c_;
cnode *prev_, *next_;
};
cnode cnodes[nr_chars_max];
int main()
{
while (gets(s)) {
cnode head;
head.prev_ = head.next_ = &head;
char* p;
cnode* pcnode = &head;
int cni = 0;
for (p = s; *p; p++) {
if (*p == '[')
pcnode = &head;
else if (*p == ']')
pcnode = head.prev_;
else {
cnode* pcn = &cnodes[cni++];
pcn->c_ = *p;
pcn->prev_ = pcnode; pcn->next_ = pcnode->next_;
pcnode->next_->prev_ = pcn; pcnode->next_ = pcn;
pcnode = pcn;
}
}
p = s;
for (pcnode = head.next_; pcnode != &head; pcnode = pcnode->next_)
*p++ = pcnode->c_;
*p = '\0';
puts(s);
}
return 0;
}
No comments:
Post a Comment