标签:模拟,字符串,排序(快排)
这道题可以巧妙地运用结构体中记录在数组中的位置,来对sort做点手脚
题意本身就是记录一些人,他们出生日的日期,然后输出从小到大的名字。如果是同一天,则输出在输入序列中靠后的人。
解决日期的比较本身很简单,但是同天时,输出在输入序列中靠后的人这一点似乎有点不太好做。
然而可以这样做,在struct结构体中定义一个变量level,记录这个对象在数组中的对象,在cmp函数中,如果发现是同年同月同日生,就返回a.level > b.level,这样在排序中,就会导致输入序列中靠后的人排在前面。
以下是关键代码:
struct sdata { string name; int year, month, day; int level; sdata(string n = "",int y = 0,int m = 0,int d = 0,int l = -1) :name(n),year(y),month(m),day(d),level(l) {} }p[N]; bool cmp(sdata& a, sdata& b) { if (a.year != b.year) return a.year < b.year; if (a.month != b.month) return a.month < b.month; if (a.day != b.day) return a.day < b.day; return a.level > b.level; }