P7041 [NWRRC2016]King’s Heir 题解

2020-12-20 22:19:27


不得不说,ACM的题水起来是真的水,这题同样如此/

其实这题只要把几个儿子年龄从小到大排序,找第一个符合要求的就行了

上代码

#include<bits/stdc++.h>
using namespace std;

int dday,dmonth,dyear//老王的死亡年月日,n;
struct node{
    int day,month,year,th;//儿子出生的年月日及顺序
}q[1000005];
//空行,好码风
bool cmp(node a,node b){
    if(b.year<a.year) return true;
    if(b.year==a.year){
        if(b.month<a.month) return true;
        if(b.month==a.month)
            if(b.day<a.day) return true;
    }
    return false;
}//基于三个参数的比较

int main(){
    cin>>dday>>dmonth>>dyear;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>q[i].day>>q[i].month>>q[i].year;
        q[i].th=i+1;
    }
    sort(q,q+n,cmp);//排序
    for(int i=0;i<n;i++){
        if(dyear-q[i].year>18){
            cout<<q[i].th<<endl;
            return 0;
        }
        else if(dyear-q[i].year==18&&q[i].month<dmonth){
            cout<<q[i].th<<endl;
            return 0;
        }
        else if(dyear-q[i].year==18&&q[i].month==dmonth&&q[i].day<dday){
            cout<<q[i].th<<endl;
            return 0;//找到直接退出
        }
    }
    cout<<-1<<endl;//不行输出-1
    return 0;
}