<——求赞
C++
#include <bits/stdc++.h>
using namespace std;
const int N = 110;
struct Person
{
string name;
string role;
int p;
}person[N];
unordered_map<string, int> t;
bool cmp(Person p1, Person p2)
{
return p1.p < p2.p;
}
int main()
{
t["rat"] = 1;
t["woman"] = t["child"] = 2;
t["man"] = 3;
t["captain"] = 4;
int n;
cin >> n;
for(int i = 0; i < n; i ++)
{
cin >> person[i].name >> person[i].role;
person[i].p = t[person[i].role];
}
stable_sort(person, person + n, cmp);
for(int i = 0; i < n; i ++) cout << person[i].name << endl;
return 0;
}
Python3
n = int(input())
d = {}
for _ in range(n):
l = list(map(str, input().split()))
if l[1]=='rat':
l[1]=1
elif l[1]=='woman':
l[1]=2
elif l[1]=='child':
l[1]=2
elif l[1]=='man':
l[1]=3
elif l[1]=='captain':
l[1]=4
d[l[0]] = l[1]
s=sorted(d.items(),key=lambda x:x[1])
for i in range(n):
print(s[i][0])
Java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
List<String>[] lists = new List[3];
for (int i = 0; i < 3; i++)
lists[i] = new ArrayList<>();
String captain = null;
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
String s1 = sc.next(), s2 = sc.next();
switch (s2) {
case "rat": {
lists[0].add(s1);
break;
}
case "man": {
lists[2].add(s1);
break;
}
case "captain": {
captain = s1;
break;
}
default: {
lists[1].add(s1);
break;
}
}
}
for (int i = 0; i < 3; i++) {
for (String s : lists[i])
System.out.println(s);
}
System.out.println(captain);
}
}
C
#include<stdio.h>
#include<string.h>
struct child
{
char name[20];
char id[20];
int number;
int qq;
};
struct child qu[200];
void InsertSort(struct child *arr, int n)
{
for (int i = 0; i < n - 1; ++i)
{
int end = i;
struct child tem = arr[end + 1];
while (end >= 0)
if (tem.qq < arr[end].qq || tem.number < arr[end].number)
{
arr[end + 1] = arr[end];
end--;
}
else break;
arr[end + 1] = tem;
}
}
int main()
{
int n;
scanf("%d",&n);
for(int i = 0; i <= n-1;i++)
{
scanf("%s",&qu[i].name);
scanf("%s",&qu[i].id);
qu[i].number = i;
}
for(int i = 0;i <= n-1;i++)
{
if(!strcmp(qu[i].id,"rat"))
qu[i].qq = 1;
else if(!strcmp(qu[i].id,"woman"))
qu[i].qq = 2;
else if(!strcmp(qu[i].id,"child"))
qu[i].qq = 2;
else if(!strcmp(qu[i].id,"man"))
qu[i].qq = 3;
else if(!strcmp(qu[i].id,"captain"))
qu[i].qq = 4;
}
InsertSort(&qu,n);
for(int i = 0; i <= n-1;i++)
printf("%s\n",qu[i].name);
return 0;
}
Python
import sys
input =sys.stdin.readline
n = int(input())
nums = []
rank = {"rat": 1, "woman": 2, "child" : 2, "man":3, "captain" : 4}
def compare(a, b):
if rank[a[1]] > rank[b[1]]:
return 1
elif rank[a[1]] < rank[b[1]]:
return -1
else:
if a[-1] > b[-1]:
return 1
elif a[-1] < b[-1]:
return -1
from functools import cmp_to_key
for i in range(n):
s = input()
a, b = s.split()
nums.append([a, b, i])
nums.sort(key = cmp_to_key(compare))
for i in range(n):
print(nums[i][0])
Javascript
process.stdin.setEncoding('utf8')
let buffer = ''
process.stdin.on('readable', () => {
let chunk = process.stdin.read()
if (chunk) buffer += chunk.toString()
})
process.stdin.on('end', () => {
// todo
let data = buffer.split('\n'),idx = 0
let n = +data[idx++]
let a = []
for (let x = 0; x < n; x++) {
let [n,p] = data[idx++].split(' ')
a[x] = {x,n,p}
}
let h = new Map()
h.set('rat',0)
h.set('woman',1)
h.set('child',1)
h.set('man',2)
h.set('captain',3)
a.sort((i,j) => {
let k = h.get(i.p) - h.get(j.p)
if(!k) return i.x - j.x
return k
})
for (let i = 0; i < a.length; i++) {
console.log(a[i].n)
}
})
Go
package main
import (
"fmt"
"sort"
)
var (
n int
mp = map[string]int{
"rat": 1,
"woman": 2,
"child": 2,
"man": 3,
"captain": 4,
}
kids []pSI
name, level string
)
type pSI struct {
name string
level, index int
}
func main() {
fmt.Scan(&n)
kids = make([]pSI, 0, n)
for i := 0; i < n; i++ {
fmt.Scan(&name, &level)
kids = append(kids, pSI{name, mp[level], i})
}
sort.Slice(kids, func(i, j int) bool {
if kids[i].level == kids[j].level {
return kids[i].index < kids[j].index
}
return kids[i].level < kids[j].level
})
for _, kid := range kids {
fmt.Println(kid.name)
}
}
互
666
stable_sort(person, person + n, cmp);
cmp有什么用