#include <iostream> #include <vector> #include <cmath> #include <algorithm> using namespace std; // 阅读一遍就行,有一些注意:如库函数调用、数字字符转换、引用参数等 struct fushu { int x; int y; fushu() {}; fushu(int a, int b): x(a), y(b) {}; }; int func_modValue(fushu f) { // x+iy return sqrt( pow(f.x, 2) + pow(f.y, 2) ); } bool comp(fushu f1, fushu f2) { // 根据题意逆向排序---vector只有pop取元素 if ( func_modValue(f1) == func_modValue(f2) ) { return f1.y > f2.y; } else { return func_modValue(f1) < func_modValue(f2); } } void func_pop(vector<fushu>& vec) { //***************若要改变容器内容函数参数记得引用 if (vec.size() == 0) { cout << "empty" << endl; } else { sort(vec.begin(), vec.end(), comp); fushu f = vec.back(); cout << f.x << "+i" << f.y << endl; vec.pop_back(); cout << "SIZE = " << vec.size() << endl; } } void func_insert(vector<fushu>& vec, fushu f) { vec.push_back(f); cout << "SIZE = " << vec.size() << endl; } int main() { int num; while (cin >> num) { vector<fushu> vec; // pop insert 操作 string var_order; while (num--) { cin >> var_order; if (var_order == "Pop") func_pop(vec); else if (var_order == "Insert") { string var_fushu; cin >> var_fushu; // 多位数提取 int var_x = 0, var_y = 0; bool flag = true; // true代表处理var_x false代表处理var_y for (int i = 0; i < var_fushu.size(); i++) { if (var_fushu[i] == '+') { flag = !flag; i++;//跳过'i' } else if (flag) { var_x = var_x * 10 + (var_fushu[i] - '0'); //*********记得字符数字转换 } else if (!flag) { var_y = var_y * 10 + (var_fushu[i] - '0'); } } //提取var_x var_y完毕 fushu* var_f = new fushu(var_x, var_y); vec.push_back(*var_f); cout << "SIZE = " << vec.size() << endl; } } } } // 64 位输出请用 printf("%lld")