main.cpp
#include <algorithm> #include <iostream> #include <vector> using namespace std; void sums(vector<int> &U,const vector<int> &V ){ vector<int> res; res.reserve(U.size()*V.size()); for (auto u:U){ for (auto v:V){ res.emplace_back(u+v); } } swap(res, U); } vector<int> reduce(const vector<vector<int>> &dice){ vector<int> scores({0}); for (auto &die:dice){ sums(scores, die); } sort(begin(scores), end(scores)); return scores; } void comp(vector<int> S1, vector<int> S2){ int w1=0, ties=0, w2=0; for (auto s1:S1){ auto p = equal_range(begin(S2), end(S2), s1); ties += p.second-p.first; w1 += p.first - begin(S2); w2 += end(S2) - p.second; } cout<< "first won "<<w1<<" times\nsecond won "<<w2<<" times\nties: "<<ties<<endl; } int main() { vector <vector<int >> player1 = {{0,1,1,2,2,2},{0,0,1,1,1,1},{0,1,1,2,2,2} }; vector <vector<int >> player2 = {{0,0,1,1,1,1},{0,1,1,2,2,2},{0,0,1,1,1,1} }; auto score1 = reduce(player1); auto score2 = reduce(player2); comp(score1, score2); return 0; }
Output