#include <iostream>
#include <algorithm>
#include <vector>
#include <memory>
struct base {
virtual ~base(){}
virtual int foo()=0;
};
struct derived_1 : base {
derived_1() : data(1){}
int data;
virtual int foo(){return data++;}
};
struct derived_2 : base {
derived_2() : data1(1), data2(1) {}
int data1;
int data2;
virtual int foo(){return --data1+ ++data2;}
};
int main()
{
using namespace std;
const int howmany = 10*1000;
const int howoften = 10*1000;
vector<unique_ptr<base> > foo;
for (int i=0; i<howmany; ++i) {
foo.push_back(unique_ptr<base>(new derived_1()));
foo.push_back(unique_ptr<base>(new derived_2()));
}
int sum = 0;
for (int i=0; i<howoften; ++i) {
for (auto& b : foo) {
sum += b->foo();
}
}
std::cout << sum << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWVtb3J5PgoKc3RydWN0IGJhc2UgewogIHZpcnR1YWwgfmJhc2UoKXt9CiAgdmlydHVhbCBpbnQgZm9vKCk9MDsKfTsKc3RydWN0IGRlcml2ZWRfMSA6IGJhc2UgewogIGRlcml2ZWRfMSgpIDogZGF0YSgxKXt9CiAgaW50IGRhdGE7CiAgdmlydHVhbCBpbnQgZm9vKCl7cmV0dXJuIGRhdGErKzt9Cn07CnN0cnVjdCBkZXJpdmVkXzIgOiBiYXNlIHsKICBkZXJpdmVkXzIoKSA6IGRhdGExKDEpLCBkYXRhMigxKSB7fQogIGludCBkYXRhMTsKICBpbnQgZGF0YTI7CiAgdmlydHVhbCBpbnQgZm9vKCl7cmV0dXJuIC0tZGF0YTErICsrZGF0YTI7fQp9OwoKaW50IG1haW4oKQp7CiAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKICBjb25zdCBpbnQgaG93bWFueSAgPSAxMCoxMDAwOwogIGNvbnN0IGludCBob3dvZnRlbiA9IDEwKjEwMDA7CgogIHZlY3Rvcjx1bmlxdWVfcHRyPGJhc2U+ID4gZm9vOwoKICBmb3IgKGludCBpPTA7IGk8aG93bWFueTsgKytpKSB7CiAgICBmb28ucHVzaF9iYWNrKHVuaXF1ZV9wdHI8YmFzZT4obmV3IGRlcml2ZWRfMSgpKSk7CiAgICBmb28ucHVzaF9iYWNrKHVuaXF1ZV9wdHI8YmFzZT4obmV3IGRlcml2ZWRfMigpKSk7CiAgfQoKICBpbnQgc3VtID0gMDsKICBmb3IgKGludCBpPTA7IGk8aG93b2Z0ZW47ICsraSkgewogICAgZm9yIChhdXRvJiBiIDogZm9vKSB7CiAgICAgIHN1bSArPSBiLT5mb28oKTsKICAgIH0KICB9CiAgc3RkOjpjb3V0IDw8IHN1bSA8PCAnXG4nOwp9Cgo=