提交时间:2025-05-27 15:09:03
运行 ID: 193909
#include <iostream> #include <vector> #include <algorithm> using namespace std; struct Treasure { int x, y; }; bool compareTreasures(const Treasure& a, const Treasure& b) { if (a.y != b.y) { return a.y < b.y; // 先按y坐标升序排序 } return a.x < b.x; // 如果y坐标相同,则按x坐标升序排序 } int main() { long long N, M, P; cin >> N >> M >> P; vector<Treasure> treasures(P); for (int i = 0; i < P; ++i) { cin >> treasures[i].x >> treasures[i].y; } sort(treasures.begin(), treasures.end(), compareTreasures); int trips = 1; // 初始化趟数为1,因为至少需要一趟来访问第一个宝藏 int maxX = treasures[0].x; // 当前趟数的最远x坐标 int maxY = treasures[0].y; // 当前趟数的最远y坐标 for (int i = 1; i < P; ++i) { if (treasures[i].x > maxX || treasures[i].y > maxY) { // 如果当前宝藏不在当前趟数的访问范围内,则需要开始新的一趟 trips++; maxX = treasures[i].x; // 更新最远x坐标 maxY = treasures[i].y; // 更新最远y坐标 } // 否则,当前宝藏可以在当前趟数中访问到,无需更新趟数或坐标 } cout << trips << endl; return 0; }