1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | #include <iostream> #include <string> #include <vector> #include <sys/timeb.h> int GetMilliCount() { // Something like GetTickCount but portable // It rolls over every ~ 12.1 days (0x100000/24/60/60) // Use GetMilliSpan to correct for rollover timeb tb; ftime( &tb ); int nCount = tb.millitm + (tb.time & 0xfffff) * 1000; return nCount; } struct S { unsigned int a; void* b; bool operator==(const S& other) const { return a == other.a && b == other.b; } }; template <typename Iterator> int count_eq(Iterator begin, Iterator end) { int result = 0; for (Iterator i = begin; i != end; ++i) { for (Iterator j = i + 1; j != end; ++j) { result += *i == *j; } } return result; } template <typename Iterator> void mesure(Iterator begin, Iterator end) { long long t0 = GetMilliCount(); int res = count_eq(begin, end); long long t1 = GetMilliCount(); std::cout << "result: " << res <<"; Time: "<<(t1-t0)<<"\n"; } int main() { const unsigned int Size = 20000; std::vector<unsigned long long> l; for (int i = 0; i < Size; i++) { l.push_back(i% (Size/10)); } std::vector<S> s; for (int j = 0; j < Size; j++) { S el; el.a = j% (Size/10); el.b = (void*)(j% (Size/10)); s.push_back(el); } mesure(l.begin(), l.end()); mesure(s.begin(), s.end()); mesure(l.begin(), l.end()); mesure(s.begin(), s.end()); } |
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3lzL3RpbWViLmg+CgppbnQgR2V0TWlsbGlDb3VudCgpCnsKICAvLyBTb21ldGhpbmcgbGlrZSBHZXRUaWNrQ291bnQgYnV0IHBvcnRhYmxlCiAgLy8gSXQgcm9sbHMgb3ZlciBldmVyeSB+IDEyLjEgZGF5cyAoMHgxMDAwMDAvMjQvNjAvNjApCiAgLy8gVXNlIEdldE1pbGxpU3BhbiB0byBjb3JyZWN0IGZvciByb2xsb3ZlcgogIHRpbWViIHRiOwogIGZ0aW1lKCAmdGIgKTsKICBpbnQgbkNvdW50ID0gdGIubWlsbGl0bSArICh0Yi50aW1lICYgMHhmZmZmZikgKiAxMDAwOwogIHJldHVybiBuQ291bnQ7Cn0KCnN0cnVjdCBTCnsKICAgIHVuc2lnbmVkIGludCBhOwogICAgdm9pZCogYjsKCiAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUyYgb3RoZXIpICBjb25zdAogICAgewogICAgICAgIHJldHVybiBhID09IG90aGVyLmEgJiYgYiA9PSBvdGhlci5iOwogICAgfQp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXJhdG9yPgppbnQgY291bnRfZXEoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKewogICAgaW50IHJlc3VsdCA9IDA7CiAgICBmb3IgKEl0ZXJhdG9yIGkgID0gYmVnaW47IGkgIT0gZW5kOyArK2kpIHsKICAgICAgICBmb3IgKEl0ZXJhdG9yIGogID0gaSArIDE7IGogIT0gZW5kOyArK2opIHsKICAgICAgICAgICAgcmVzdWx0ICs9ICppID09ICpqOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBJdGVyYXRvcj4Kdm9pZCBtZXN1cmUoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKewogICAgbG9uZyBsb25nIHQwID0gR2V0TWlsbGlDb3VudCgpOwogICAgaW50IHJlcyA9IGNvdW50X2VxKGJlZ2luLCBlbmQpOwogICAgbG9uZyBsb25nIHQxID0gR2V0TWlsbGlDb3VudCgpOwogICAgc3RkOjpjb3V0IDw8ICJyZXN1bHQ6ICIgPDwgcmVzIDw8IjsgVGltZTogIjw8KHQxLXQwKTw8IlxuIjsKfQoKaW50IG1haW4oKQp7CiAgICBjb25zdCB1bnNpZ25lZCBpbnQgU2l6ZSA9IDIwMDAwOwogICAgc3RkOjp2ZWN0b3I8dW5zaWduZWQgbG9uZyBsb25nPiBsOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTaXplOyBpKyspIHsKICAgICAgICBsLnB1c2hfYmFjayhpJSAoU2l6ZS8xMCkpOwogICAgfQoKICAgIHN0ZDo6dmVjdG9yPFM+IHM7CiAgICBmb3IgKGludCBqID0gMDsgaiA8IFNpemU7IGorKykgewogICAgICAgIFMgZWw7CiAgICAgICAgZWwuYSA9IGolIChTaXplLzEwKTsKICAgICAgICBlbC5iID0gKHZvaWQqKShqJSAoU2l6ZS8xMCkpOwogICAgICAgIHMucHVzaF9iYWNrKGVsKTsKICAgIH0KCiAgICBtZXN1cmUobC5iZWdpbigpLCBsLmVuZCgpKTsKICAgIG1lc3VyZShzLmJlZ2luKCksIHMuZW5kKCkpOyAKICAgIG1lc3VyZShsLmJlZ2luKCksIGwuZW5kKCkpOwogICAgbWVzdXJlKHMuYmVnaW4oKSwgcy5lbmQoKSk7IAp9Cg==
-
upload with new input
-
result: Success time: 1.64s memory: 2964 kB returned value: 0
result: 90000; Time: 388 result: 90000; Time: 443 result: 90000; Time: 387 result: 90000; Time: 441


