#include #include #include #include #include using namespace std; set> flip_about(set> input_points, bool x_flip, int value); int main(int argc, char* argv[]) { string line; bool coord_input = true; set> coords; vector> folds; while(getline(cin, line)) { if (0 == line.size()) { coord_input = false; continue; } if (coord_input) { string::size_type n = line.find(','); pair coord(stoi(line.substr(0,n)), stoi(line.substr(n+1))); coords.insert(coord); } else { string::size_type n = line.find_last_of(' '); line = line.substr(n+1); pair fold(line[0]=='x', stoi(line.substr(2))); folds.push_back(fold); } } coords = flip_about(coords, folds[0].first, folds[0].second); cout << coords.size() << endl; } set> flip_about(set> input_points, bool x_flip, int value) { set> output_points; set>::iterator it = input_points.begin(); for(; it != input_points.end(); ++it) { if (x_flip) { if (it->first > value) { pair flipped_coord(2*value-it->first, it->second); output_points.insert(flipped_coord); } else { output_points.insert(*it); } } else { if (it->second > value) { pair flipped_coord(it->first, 2*value-it->second); output_points.insert(flipped_coord); } else { output_points.insert(*it); } } } return output_points; }