Problem Statement: http://www.topcoder.com/stat?c=problem_statement&pm=210 Code : #include <iostream> #include <vector> #include <sstream> using namespace std; struct match { string name; int points; match* next; }; void insertMatch(match* &head,string name,int n) { match *p,*p2; if (head==NULL) { head = new match; head->name = name; head->points = n; head->next = NULL; }else if (n > head->points) { // add a node p = new match; p->name = name; p->points = n; p->next = head; head = p; }else{ p = head->next; p2 = head; while ( p!=NULL && p->points>=n ) { p2 = p; p = p->next; } p2->next = new match; p2->next->name = name; p2->next->points = n; p2->next->next = p; } } // class MatchMaker class MatchMaker { public: vector<string> getBestMatches(vector<string> members, string currentUser, int sf); }; vector<string> MatchMaker::getBestMatches(vector<string> members, string currentUser, int sf) { int curI(0), num_cur_correct; string n, curI_ans; string s, sought_sex; char a1,a2; match *matches(NULL), *p; // get info for request for (int i=0;i<members.size();i++) { stringstream ss(members[i]); ss >> n; // name if (currentUser.compare(n) == 0) { curI = i; ss >> s; // sex ss >> sought_sex; // desired sex while(ss >> s) { curI_ans.append( s ); curI_ans.append( " "); } break; } } // go through for every other person for (int i=0; i<members.size();i++) { if (i != curI) { stringstream ss(members[i]); ss >> n; // name ss >> s; // sex if (sought_sex.compare(s) == 0) { num_cur_correct = 0; ss >> s; // desired sex stringstream ss2(curI_ans); while (ss2 >> a2) { ss >> a1; if (a1 == a2) num_cur_correct++; } if (num_cur_correct >= sf) { insertMatch(matches,n,num_cur_correct); } } } } // read sorted list into result vector<string> results; while (matches != NULL) { p = matches; matches = matches->next; results.push_back(p->name); delete p; } return results; } #define STRING_LEN 50 int main() { char *p[STRING_LEN] = {"BETTY F M A A C C", "TOM M F A D C A", "SUE F M D D D D", "ELLEN F M A A C A", "JOE M F A A C A", "ED M F A D D A", "SALLY F M C D A B", "MARGE F M A A C C"}; vector<string> members,bests; for (int i = 0;i < 8; i++) { members.push_back(p[i]); } MatchMaker mm; bests = mm.getBestMatches(members,"BETTY",2); return 0; }