Java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Comparator;
class Row {
String id, name;
int grade;
Row(String id, String name, int grade) {
this.id = id;
this.name = name;
this.grade = grade;
}
}
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String[] firstLine = reader.readLine().split(" ");
int n = Integer.parseInt(firstLine[0]);
int c = Integer.parseInt(firstLine[1]);
Row[] rows = new Row[n];
for (int i = 0; i < n; i++) {
String[] input = reader.readLine().split(" ");
String id = input[0];
String name = input[1];
int grade = Integer.parseInt(input[2]);
rows[i] = new Row(id, name, grade);
}
if (c == 1) {
Arrays.sort(rows, Comparator.comparing(row -> row.id));
} else if (c == 2) {
Arrays.sort(rows, (a, b) -> {
if (!a.name.equals(b.name)) {
return a.name.compareTo(b.name);
}
return a.id.compareTo(b.id);
});
} else {
Arrays.sort(rows, (a, b) -> {
if (a.grade != b.grade) {
return Integer.compare(a.grade, b.grade);
}
return a.id.compareTo(b.id);
});
}
for (Row row : rows) {
System.out.println(row.id + " " + row.name + " " + row.grade);
}
}
}
C++
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 100010;
int n;
struct Row {
string id, name;
int grade;
} rows[N];
bool cmp1(Row a, Row b) {
return a.id < b.id;
}
bool cmp2(Row a, Row b) {
if (a.name != b.name) return a.name < b.name;
return a.id < b.id;
}
bool cmp3(Row a, Row b) {
if (a.grade != b.grade) return a.grade < b.grade;
return a.id < b.id;
}
int main() {
int c;
scanf("%d%d", &n, &c);
char id[10], name[10];
for (int i = 0; i < n; i++) {
int grade;
scanf("%s%s%d", id, name, &grade);
rows[i] = {id, name, grade};
}
if (c == 1) sort(rows, rows + n, cmp1);
else if (c == 2) sort(rows, rows + n, cmp2);
else sort(rows, rows + n, cmp3);
for (int i = 0; i < n; i++)
printf("%s %s %d\n", rows[i].id.c_str(), rows[i].name.c_str(), rows[i].grade);
return 0;
}