#include <iostream>
#include <string>
#include <ctime>
#include <map>
#include <limits>
using namespace std;
template< char C >
std::istream& skip( std::istream& in )
{
return in.ignore( std::numeric_limits< std::streamsize >::max(), C );
}
struct opt // opt für optional; liest ein int, wenn eine Zahl kommt, sonst wird der Wert =0 gesetzt
{
explicit opt( int& value )
: value_( value )
{}
friend std::istream& operator>>( std::istream& in, opt o ) // Lesefunktion für den Wrapper 'opt'
{
char c;
if( in >> c && in.putback( c ) ) // lese das nächste Zeichen 'c' und stelle es auch gleich zurück!
{
if( ('0' <= c && c <= '9') || c == '-' || c == '+' ) // könnte eine Zahl sein
in >> o.value_; // dann lese die Zahl
else
o.value_ = 0; // sonst definiert auf 0 setzen
}
return in;
}
private:
int& value_;
};
int main()
{
map<string, int> m; // Variablen so lokal wie möglich anlegen
std::istream & log = std::cin;
string name1;
int value;
string dpsorheal; //<-- hier optional lesen -->
// Format: " <Zeit> | <name1> | <name2> |<skillname> | [<value>] | <dpsorheal> | ..Rest..EOL"
while( getline( getline( log >> skip<'|'>, name1, '|' ) >> skip<'|'> >> skip<'|'> >> opt(value) >> skip<'|'>, dpsorheal, '|' ) >> skip<'\n'> )
{ // usw.
m[name1]+=value;
}
for(map<string, int>::iterator iter=m.begin(); iter!=m.end(); ++iter)
{
cout << iter->first << " = " << iter->second << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8Y3RpbWU+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxsaW1pdHM+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZTwgY2hhciBDID4Kc3RkOjppc3RyZWFtJiBza2lwKCBzdGQ6OmlzdHJlYW0mIGluICkKewogICAgcmV0dXJuIGluLmlnbm9yZSggc3RkOjpudW1lcmljX2xpbWl0czwgc3RkOjpzdHJlYW1zaXplID46Om1heCgpLCBDICk7Cn0KCnN0cnVjdCBvcHQgLy8gb3B0IGbDvHIgb3B0aW9uYWw7IGxpZXN0IGVpbiBpbnQsIHdlbm4gZWluZSBaYWhsIGtvbW10LCBzb25zdCB3aXJkIGRlciBXZXJ0ID0wIGdlc2V0enQKewogICAgZXhwbGljaXQgb3B0KCBpbnQmIHZhbHVlICkKICAgICAgICA6IHZhbHVlXyggdmFsdWUgKQogICAge30KICAgIGZyaWVuZCBzdGQ6OmlzdHJlYW0mIG9wZXJhdG9yPj4oIHN0ZDo6aXN0cmVhbSYgaW4sIG9wdCBvICkgLy8gTGVzZWZ1bmt0aW9uIGbDvHIgZGVuIFdyYXBwZXIgJ29wdCcKICAgIHsKICAgICAgICBjaGFyIGM7CiAgICAgICAgaWYoIGluID4+IGMgJiYgaW4ucHV0YmFjayggYyApICkgLy8gbGVzZSBkYXMgbsOkY2hzdGUgWmVpY2hlbiAnYycgdW5kIHN0ZWxsZSBlcyBhdWNoIGdsZWljaCB6dXLDvGNrIQogICAgICAgIHsKICAgICAgICAgICAgaWYoICgnMCcgPD0gYyAmJiBjIDw9ICc5JykgfHwgYyA9PSAnLScgfHwgYyA9PSAnKycgKSAvLyBrw7ZubnRlIGVpbmUgWmFobCBzZWluCiAgICAgICAgICAgICAgICBpbiA+PiBvLnZhbHVlXzsgLy8gZGFubiBsZXNlIGRpZSBaYWhsCiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIG8udmFsdWVfID0gMDsgLy8gc29uc3QgZGVmaW5pZXJ0IGF1ZiAwIHNldHplbgogICAgICAgIH0KICAgICAgICByZXR1cm4gaW47CiAgICB9CnByaXZhdGU6CiAgICBpbnQmIHZhbHVlXzsKfTsKCmludCBtYWluKCkKewogICAgbWFwPHN0cmluZywgaW50PiBtOyAvLyBWYXJpYWJsZW4gc28gbG9rYWwgd2llIG3DtmdsaWNoIGFubGVnZW4KCQoJc3RkOjppc3RyZWFtICYgbG9nID0gc3RkOjpjaW47CgkKCXN0cmluZyBuYW1lMTsKICAgIGludCB2YWx1ZTsKICAgIHN0cmluZyBkcHNvcmhlYWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy88LS0gaGllciBvcHRpb25hbCBsZXNlbiAtLT4KICAgIC8vIEZvcm1hdDogICAgICAgICAgICAgICAgIiA8WmVpdD4gICAgfCAgIDxuYW1lMT4gIHwgICA8bmFtZTI+ICAgfDxza2lsbG5hbWU+IHwgICAgICAgWzx2YWx1ZT5dICAgICAgICAgIHwgICA8ZHBzb3JoZWFsPiAgfCAuLlJlc3QuLkVPTCIKICAgIHdoaWxlKCBnZXRsaW5lKCBnZXRsaW5lKCBsb2cgPj4gc2tpcDwnfCc+LCBuYW1lMSwgJ3wnICkgPj4gc2tpcDwnfCc+ID4+IHNraXA8J3wnPiA+PiBvcHQodmFsdWUpID4+IHNraXA8J3wnPiwgZHBzb3JoZWFsLCAnfCcgKSA+PiBza2lwPCdcbic+ICkKICAgIHsgLy8gdXN3LgoJCW1bbmFtZTFdKz12YWx1ZTsKCX0KCQoJZm9yKG1hcDxzdHJpbmcsIGludD46Oml0ZXJhdG9yIGl0ZXI9bS5iZWdpbigpOyBpdGVyIT1tLmVuZCgpOyArK2l0ZXIpCiAgICB7CiAgICAgICAgY291dCA8PCBpdGVyLT5maXJzdCA8PCAiID0gIiA8PCBpdGVyLT5zZWNvbmQgPDwgZW5kbDsKICAgIH0KCQoJcmV0dXJuIDA7Cn0KCg==
MjE6Mzk6NTEuOTkyfFJlc3Bla3Rsb3N8VG9iaWFzdm9ufFNhbHZhdGlvbnwxMjk1fEh8CjIxOjM5OjUxLjk5MnxSZXNwZWt0bG9zfFNjaGxpdHpvaHJ8U2FsdmF0aW9ufDcyNXxIfAoyMTozOTo1Mi4yNzF8UmVzcGVrdGxvc3xUcmlidW51c3xSZWp1dmVuYXRlfDc2MHxIfAoyMTozOTo1My4wMDd8VG9iaWF8RWxlcmFhbmF8U2FsdmF0aW9ufDcyNXxIfAoyMTozOTo1My4wMDd8VG9iaXxSYWN0YXxTYWx2YXRpb258MTI4M3xIfAoyMTozOTo1My4wMDd8VG9iaXxTZXBob25lfFNhbHZhdGlvbnwxMjgzfEh8CjIxOjM5OjUzLjAwN3xSZXNwZWt0bG9zfFJlc3Bla3Rsb3N8U2FsdmF0aW9ufDc4M3xIfAoyMTozOTo1My4wMDh8UmVzcGVrdGxvc3xUcmlidW51c3xTYWx2YXRpb258MTI1OHxIfAoyMTozOTo1My4wMDh8VG9iaXxUb2JpYXN2b258U2FsdmF0aW9ufDc0N3xIfAoyMTozOTo1My4wMDh8VG9iaXxTY2hsaXR6b2hyfFNhbHZhdGlvbnw3MjV8SHwKMjE6Mzk6NTQuMDc0fFJlc3Bla3Rsb3N8UmFjdGF8U2FsdmF0aW9ufDEyODN8SHwKMjE6Mzk6NTQuMDc0fFJlc3Bla3Rsb3N8RWxlcmFhbmF8U2FsdmF0aW9ufDcyNXxIfAoyMTozOTo1NC4wNzR8UmVzcGVrdGxvc3xTZXBob25lfFNhbHZhdGlvbnw3NDB8SHwKMjE6Mzk6NTQuMDc1fFJlc3Bla3Rsb3N8UmVzcGVrdGxvc3xTYWx2YXRpb258MTM1N3xIfAoyMTozOTo1NC4wNzV8UmVzcGVrdGxvc3xUcmlidW51c3xTYWx2YXRpb258NzI1fEh8CjIxOjM5OjU0LjA3NXxSZXNwZWt0bG9zfFRvYml8U2FsdmF0aW9ufDc0N3xIfAoyMTozOTo1NC4wNzV8UmVzcGVrdGxvc3xTY2hsaXR6b2hyfFNhbHZhdGlvbnw3MjV8SHwKMjE6Mzk6NTQuMzA1fFJlc3Bla3Rsb3N8UmVzcGVrdGxvc3xFeGl0Q29tYmF0fHxFQ3w=
21:39:51.992|Respektlos|Tobiasvon|Salvation|1295|H|
21:39:51.992|Respektlos|Schlitzohr|Salvation|725|H|
21:39:52.271|Respektlos|Tribunus|Rejuvenate|760|H|
21:39:53.007|Tobia|Eleraana|Salvation|725|H|
21:39:53.007|Tobi|Racta|Salvation|1283|H|
21:39:53.007|Tobi|Sephone|Salvation|1283|H|
21:39:53.007|Respektlos|Respektlos|Salvation|783|H|
21:39:53.008|Respektlos|Tribunus|Salvation|1258|H|
21:39:53.008|Tobi|Tobiasvon|Salvation|747|H|
21:39:53.008|Tobi|Schlitzohr|Salvation|725|H|
21:39:54.074|Respektlos|Racta|Salvation|1283|H|
21:39:54.074|Respektlos|Eleraana|Salvation|725|H|
21:39:54.074|Respektlos|Sephone|Salvation|740|H|
21:39:54.075|Respektlos|Respektlos|Salvation|1357|H|
21:39:54.075|Respektlos|Tribunus|Salvation|725|H|
21:39:54.075|Respektlos|Tobi|Salvation|747|H|
21:39:54.075|Respektlos|Schlitzohr|Salvation|725|H|
21:39:54.305|Respektlos|Respektlos|ExitCombat||EC|