洛谷P1105 普及- 生日

        标签:模拟,字符串,排序(快排)

        这道题可以巧妙地运用结构体中记录在数组中的位置,来对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;
 }
原文地址:https://www.cnblogs.com/HotPants/p/11885645.html