#include <algorithm>
#include <iostream>
#include <cstring>
char *RGBorder(char *c_a, int num)
{
int middle = 0; // assume we only want the middle element
int low = 0; // before the G's
int high = num - 1; // after the G's
while (middle <= high)
{
if (c_a[middle] == 'R') // if we see an 'R' in the middle, it needs to go before the middle
{
std::swap(c_a[middle], c_a[low]); // swap it to a place before middle
++middle; // middle has creeped up one spot
++low; // so has the point where we will swap when we do this again
}
else
if (c_a[middle] == 'B') // if we see a 'B' as the middle element, it needs to go after the middle
{
std::swap(c_a[middle], c_a[high]); // place it as far back as you can
--high; // decrease the back position for next swap that comes here
}
else
++middle; // it is a 'G', do nothing
}
return c_a;
}
int main()
{
char ca[] = "GBRRBRGGRRBG";
std::cout << RGBorder(ca, strlen(ca));
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KCmNoYXIgKlJHQm9yZGVyKGNoYXIgKmNfYSwgaW50IG51bSkKewogICAgaW50IG1pZGRsZSA9IDA7ICAvLyBhc3N1bWUgd2Ugb25seSB3YW50IHRoZSBtaWRkbGUgZWxlbWVudAogICAgaW50IGxvdyA9IDA7ICAgICAvLyBiZWZvcmUgdGhlIEcncwogICAgaW50IGhpZ2ggPSBudW0gLSAxOyAgLy8gYWZ0ZXIgdGhlIEcncwoKICAgIHdoaWxlIChtaWRkbGUgPD0gaGlnaCkKICAgIHsKICAgICAgICBpZiAoY19hW21pZGRsZV0gPT0gJ1InKSAgLy8gaWYgd2Ugc2VlIGFuICdSJyBpbiB0aGUgbWlkZGxlLCBpdCBuZWVkcyB0byBnbyBiZWZvcmUgdGhlIG1pZGRsZQogICAgICAgIHsKICAgICAgICAgICAgc3RkOjpzd2FwKGNfYVttaWRkbGVdLCBjX2FbbG93XSk7ICAvLyBzd2FwIGl0IHRvIGEgcGxhY2UgYmVmb3JlIG1pZGRsZQogICAgICAgICAgICArK21pZGRsZTsgIC8vIG1pZGRsZSBoYXMgY3JlZXBlZCB1cCBvbmUgc3BvdAogICAgICAgICAgICArK2xvdzsgICAgIC8vIHNvIGhhcyB0aGUgcG9pbnQgd2hlcmUgd2Ugd2lsbCBzd2FwIHdoZW4gd2UgZG8gdGhpcyBhZ2FpbgogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICAgIGlmIChjX2FbbWlkZGxlXSA9PSAnQicpICAvLyBpZiB3ZSBzZWUgYSAnQicgYXMgdGhlIG1pZGRsZSBlbGVtZW50LCBpdCBuZWVkcyB0byBnbyBhZnRlciB0aGUgbWlkZGxlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChjX2FbbWlkZGxlXSwgY19hW2hpZ2hdKTsgLy8gcGxhY2UgaXQgYXMgZmFyIGJhY2sgYXMgeW91IGNhbgogICAgICAgICAgICAgICAgLS1oaWdoOyAgLy8gZGVjcmVhc2UgdGhlIGJhY2sgcG9zaXRpb24gZm9yIG5leHQgc3dhcCB0aGF0IGNvbWVzIGhlcmUKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICArK21pZGRsZTsgIC8vIGl0IGlzIGEgJ0cnLCBkbyBub3RoaW5nCiAgICB9CiAgICByZXR1cm4gY19hOwp9CgppbnQgbWFpbigpCnsKICAgIGNoYXIgY2FbXSA9ICJHQlJSQlJHR1JSQkciOwogICAgc3RkOjpjb3V0IDw8IFJHQm9yZGVyKGNhLCBzdHJsZW4oY2EpKTsKfQo=