#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
int main() {
vector<int> v1,v2, sim;
stringstream sfs1{"1 2 3 4 5"};
stringstream sfs2{"8 4 5 7 1"};
// read 2 files
copy(istream_iterator<int>(sfs1), istream_iterator<int>(), back_inserter(v1));
copy(istream_iterator<int>(sfs2), istream_iterator<int>(), back_inserter(v2));
// make the sequence sorted for set_intersection to work
sort(v1.begin(), v1.end());
sort(v2.begin(), v2.end());
set_intersection(v1.cbegin(), v1.cend(), v2.cbegin(), v2.cend(), back_inserter(sim));
cout << "Similar elements: " << sim.size()<<endl;
cout << "Similarity coefficient: "<< (double)sim.size()/max(v1.size(), v2.size())*100 <<"%"<<endl;
cout << "Explanations: "<<endl;
cout<<" File1:"; copy(v1.cbegin(), v1.cend(), ostream_iterator<int>(cout," ")); cout<<endl;
cout<<" File2:"; copy(v2.cbegin(), v2.cend(), ostream_iterator<int>(cout," ")); cout<<endl;
cout<<" In common:"; copy(sim.cbegin(), sim.cend(), ostream_iterator<int>(cout," ")); cout<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGl0ZXJhdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKSB7Cgl2ZWN0b3I8aW50PiB2MSx2Miwgc2ltOyAKCXN0cmluZ3N0cmVhbSBzZnMxeyIxIDIgMyA0IDUifTsKCXN0cmluZ3N0cmVhbSBzZnMyeyI4IDQgNSA3IDEifTsKCQoJLy8gcmVhZCAyIGZpbGVzCgljb3B5KGlzdHJlYW1faXRlcmF0b3I8aW50PihzZnMxKSwgaXN0cmVhbV9pdGVyYXRvcjxpbnQ+KCksIGJhY2tfaW5zZXJ0ZXIodjEpKTsKCWNvcHkoaXN0cmVhbV9pdGVyYXRvcjxpbnQ+KHNmczIpLCBpc3RyZWFtX2l0ZXJhdG9yPGludD4oKSwgYmFja19pbnNlcnRlcih2MikpOwoJCgkvLyBtYWtlIHRoZSBzZXF1ZW5jZSBzb3J0ZWQgZm9yIHNldF9pbnRlcnNlY3Rpb24gdG8gd29yayAKCXNvcnQodjEuYmVnaW4oKSwgdjEuZW5kKCkpOyAKCXNvcnQodjIuYmVnaW4oKSwgdjIuZW5kKCkpOyAKICAgIHNldF9pbnRlcnNlY3Rpb24odjEuY2JlZ2luKCksIHYxLmNlbmQoKSwgdjIuY2JlZ2luKCksIHYyLmNlbmQoKSwgYmFja19pbnNlcnRlcihzaW0pKTsKICAgIGNvdXQgPDwgIlNpbWlsYXIgZWxlbWVudHM6ICIgPDwgc2ltLnNpemUoKTw8ZW5kbDsgCiAgICBjb3V0IDw8ICJTaW1pbGFyaXR5IGNvZWZmaWNpZW50OiAiPDwgKGRvdWJsZSlzaW0uc2l6ZSgpL21heCh2MS5zaXplKCksIHYyLnNpemUoKSkqMTAwIDw8IiUiPDxlbmRsOyAgCiAgIAogICAgY291dCA8PCAiRXhwbGFuYXRpb25zOiAiPDxlbmRsOwoJY291dDw8IiAgRmlsZTE6IjsgY29weSh2MS5jYmVnaW4oKSwgdjEuY2VuZCgpLCBvc3RyZWFtX2l0ZXJhdG9yPGludD4oY291dCwiICIpKTsgY291dDw8ZW5kbDsgCgljb3V0PDwiICBGaWxlMjoiOyBjb3B5KHYyLmNiZWdpbigpLCB2Mi5jZW5kKCksIG9zdHJlYW1faXRlcmF0b3I8aW50Pihjb3V0LCIgIikpOyBjb3V0PDxlbmRsOyAKCWNvdXQ8PCIgIEluIGNvbW1vbjoiOyBjb3B5KHNpbS5jYmVnaW4oKSwgc2ltLmNlbmQoKSwgb3N0cmVhbV9pdGVyYXRvcjxpbnQ+KGNvdXQsIiAiKSk7IGNvdXQ8PGVuZGw7IAoJCgkKCXJldHVybiAwOwp9