#include <string>
#include <iostream>
#include <iomanip>
#include <chrono>
using namespace std;
int main(int argc, const char * argv[])
{
string s;
for(int i = 0; i < 100000; ++i) s += rand()%26+'A';
{
auto start = chrono::high_resolution_clock::now();
string d;
d.reserve(s.length()*3/2);
for(size_t i = 0; i < s.length(); ++i)
{
d += s[i++];
if (i < s.length())
{
d += s[i];
d += '-';
}
}
auto stop = chrono::high_resolution_clock::now();
cout << chrono::duration_cast<chrono::nanoseconds>(stop-start).count() << endl;
}
{
auto start = chrono::high_resolution_clock::now();
string str;
str.resize(s.length() * 3/2);
size_t size = 0;
for (size_t i = 0; i < s.length(); ++i) {
str[size++] = s[i++];
if (i < s.length()) {
str[size++] = s[i];
if (i != s.length() - 1)
str[size++] = '-';
}
}
// ;-)
str.resize(size);
auto stop = chrono::high_resolution_clock::now();
cout << chrono::duration_cast<chrono::nanoseconds>(stop-start).count() << endl;
}
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGNocm9ubz4KCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCmludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKQp7CgogICAgc3RyaW5nIHM7CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHMgKz0gcmFuZCgpJTI2KydBJzsKCgl7CiAgICAJYXV0byBzdGFydCA9IGNocm9ubzo6aGlnaF9yZXNvbHV0aW9uX2Nsb2NrOjpub3coKTsKICAgIAlzdHJpbmcgZDsKICAgIAlkLnJlc2VydmUocy5sZW5ndGgoKSozLzIpOwogICAgCWZvcihzaXplX3QgaSA9IDA7IGkgPCBzLmxlbmd0aCgpOyArK2kpCiAgICAJewogICAgICAgIAlkICs9IHNbaSsrXTsKICAgICAgICAJaWYgKGkgPCBzLmxlbmd0aCgpKQogICAgICAgIAl7CiAgICAgICAgICAgIAlkICs9IHNbaV07CiAgICAgICAgICAgIAlkICs9ICctJzsKICAgICAgICAJfQogICAgCX0KICAgIAlhdXRvIHN0b3AgPSBjaHJvbm86OmhpZ2hfcmVzb2x1dGlvbl9jbG9jazo6bm93KCk7CiAgICAJY291dCA8PCBjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8Y2hyb25vOjpuYW5vc2Vjb25kcz4oc3RvcC1zdGFydCkuY291bnQoKSA8PCBlbmRsOwoJfQoKCXsKICAgIAlhdXRvIHN0YXJ0ID0gY2hyb25vOjpoaWdoX3Jlc29sdXRpb25fY2xvY2s6Om5vdygpOwogICAgCQogICAJICAgIHN0cmluZyBzdHI7CiAgICAJc3RyLnJlc2l6ZShzLmxlbmd0aCgpICogMy8yKTsKICAgIAlzaXplX3Qgc2l6ZSA9IDA7CgogICAgCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcy5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgCXN0cltzaXplKytdID0gc1tpKytdOwogICAgICAgIAlpZiAoaSA8IHMubGVuZ3RoKCkpIHsKCSAgICAgICAgICAgIHN0cltzaXplKytdID0gc1tpXTsKICAgICAgICAgICAgCWlmIChpICE9IHMubGVuZ3RoKCkgLSAxKQogICAgICAgICAgICAgICAgCXN0cltzaXplKytdID0gJy0nOwogICAgICAgIAl9CiAgICAJfQogICAgCS8vIDstKQogICAgCXN0ci5yZXNpemUoc2l6ZSk7CiAgICAJCiAgICAJYXV0byBzdG9wID0gY2hyb25vOjpoaWdoX3Jlc29sdXRpb25fY2xvY2s6Om5vdygpOwogICAgCWNvdXQgPDwgY2hyb25vOjpkdXJhdGlvbl9jYXN0PGNocm9ubzo6bmFub3NlY29uZHM+KHN0b3Atc3RhcnQpLmNvdW50KCkgPDwgZW5kbDsKCX0KCiAKfQo=