Submission
Status:
[PPPPP][PPPPP]
Score: 100
User: Heynewworld
Problemset: จุดแวะพัก
Language: cpp
Time: 0.007 second
Submitted On: 2025-03-14 04:55:47
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <sstream>
using namespace std;
struct TouristVisit {
string name;
int visitsBeforeCheckpointK;
TouristVisit(string touristName, int priorVisits)
: name(touristName), visitsBeforeCheckpointK(priorVisits) {}
bool operator<(const TouristVisit& other) const {
if (visitsBeforeCheckpointK != other.visitsBeforeCheckpointK) {
return visitsBeforeCheckpointK < other.visitsBeforeCheckpointK;
}
return name < other.name;
}
};
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int totalTourists, targetCheckpoint;
cin >> totalTourists >> targetCheckpoint;
vector<TouristVisit> touristsWhoVisitedTargetCheckpoint;
string line;
getline(cin, line);
for (int i = 0; i < totalTourists; i++) {
getline(cin, line);
stringstream lineStream(line);
string touristName;
lineStream >> touristName;
int checkpoint;
vector<int> visitedCheckpoints;
while (lineStream >> checkpoint) {
visitedCheckpoints.push_back(checkpoint);
}
bool visitedTargetCheckpoint = false;
int checkpointsBeforeTarget = 0;
for (int cp : visitedCheckpoints) {
if (cp == targetCheckpoint) {
visitedTargetCheckpoint = true;
break;
}
checkpointsBeforeTarget++;
}
if (visitedTargetCheckpoint) {
touristsWhoVisitedTargetCheckpoint.push_back(
TouristVisit(touristName, checkpointsBeforeTarget)
);
}
}
sort(touristsWhoVisitedTargetCheckpoint.begin(),
touristsWhoVisitedTargetCheckpoint.end());
if (touristsWhoVisitedTargetCheckpoint.empty()) {
cout << "-1" << endl;
} else {
const int MAX_TOURISTS_TO_SHOW = 3;
int touristsToShow = min(
static_cast<int>(touristsWhoVisitedTargetCheckpoint.size()),
MAX_TOURISTS_TO_SHOW
);
for (int i = 0; i < touristsToShow; i++) {
if (i > 0) cout << " ";
cout << touristsWhoVisitedTargetCheckpoint[i].name;
}
cout << endl;
}
return 0;
}