携程 10.10 笔试
经典做题风格
第一道:就这
第二道:我写的这么对,怎么0%啊
第三道:不会一点
第四道:无缘一见
贴第二道 0% 的错误原因 应该我猜是错在48行 if写成了while
谁懂啊,可把我聪明死了,还写个while
#include <bits/stdc++.h> using namespace std; struct Point { int x; int y; }; bool cmp_x(Point p1, Point p2) { if (p1.x == p2.x) return p1.y < p2.y; return p1.x < p2.x; } bool cmp_y(Point p1, Point p2) { if (p1.y == p2.y) return p1.x < p2.x; return p1.y < p2.y; } int main() { int n, x; cin >> n >> x; vector<Point> points(n); for (int i = 0; i < n; ++i) { cin >> points[i].x >> points[i].y; } Point p = points[x - 1]; int l = 0, r = n; // cout << "start: l:" << l << ",r:" << r << endl; while (l < r - 1) { sort(points.begin() + l, points.begin() + r, cmp_x); Point tmp = points[(r - l) / 2 + l]; if (tmp.x < p.x || (tmp.x == p.x && tmp.y <= p.y)) { cout << "R"; l = (r - l) / 2 + l; } else { cout << "L"; r = (r - l) / 2 + l; } // cout << "x: l:" << l << ",r:" << r << endl; while (l < r - 1) { sort(points.begin() + l, points.begin() + r, cmp_y); Point tmp = points[(r - l) / 2 + l]; if (tmp.y < p.y || (tmp.y == p.y && tmp.x <= p.x)) { cout << "R"; l = (r - l) / 2 + l; } else { cout << "L"; r = (r - l) / 2 + l; } } // cout << "y: l:" << l << ",r:" << r << endl; } cout << "O" << endl; }#携程笔试#