C - Relative Relatives

C - Relative Relatives

题目大意

天是泰德诞辰100周年。几个星期前,你被家人选中与所有泰德的后代联系并组织了一个惊喜派对。为了使这项任务更容易,您创建了一个年龄优先的列表,其中包含来自Ted的所有人。同一年龄的后代按字典顺序列出。您唯一需要帮助的材料是出生证明。奇怪的是,这些出生证明没有过时。他们只是列出了父亲的名字,孩子的名字,以及父亲出生时父亲的确切年龄。

Input:
对此问题的输入将以包含单个整数n的行开始,该整数n表示数据集的数量。每个数据集将根据以下描述进行格式化。单个数据集有2个组件:Descendant Count - 包含单个整数X(其中0 <X <100)的行,表示Ted后代的数量。出生证明书清单 - X出生证明的数据,每行有一个证书的数据。每个证书的数据格式为“FNAME CNAME FAGE”,其中:FNAME是父亲的名字。CNAME是孩子的名字。FAGE是CNAME出生之日父亲的整数年龄。注意:名称是个人的唯一标识符,不包含嵌入的空格。泰德的所有后代都分享了泰德的生日。因此,任何两者之间的年龄差异是整数年。(对于那些非常挑剔的人,假设他们都出生在他们出生年份的完全相同的小时,分​​钟,秒等等。)你有所有泰德后代的出生证明(一个完整的集合)。

Output:
对于每个数据集,将有X + 1行输出。第一个将读取“DATASET Y”,其中第一个数据集的Y为1,第二个数据为2,等等。随后的X行使用“NAME AGE”格式构成Ted的后代及其年龄的年龄优先列表”。相同年龄的后代将按字典顺序列出。

输入输出

Sample Input
2
1
Ted Bill 25
4
Ray James 40
James Beelzebub 17
Ray Mark 75
Ted Ray 20
Sample Output
DATASET 1
Bill 75
DATASET 2
Ray 80
James 40
Beelzebub 23
Mark 5

#include<bits/stdc++.h>
using namespace std;
struct Ted
{
    string fname;
    string cname;
    int age;
    /* data */
}ted[101];
vector<struct Ted>vt;
typedef pair<int,string>p;
vector<pair<int,string> >vp;

int cmp(p V1,p V2){
    if(V1.first==V2.first)
        return V1.second>V2.second;
}

int main()
{
    int o;
    cin>>o;
    int u=1;
    while(o--)
    {
        int n,temp=0;
        cin>>n;
        for(int i=0;i<n;i++)
        {
            cin>>ted[i].fname>>ted[i].cname>>ted[i].age;
            if(strcmp(ted[i].fname.c_str(),"Ted")==0){
                int sum=100-ted[i].age;
                vp.push_back(p(sum,ted[i].cname));
            }else
                vt.push_back(ted[i]);
        }
        while(!vt.empty()){
            p te=vp[temp];
            for(int i=0;i<vt.size();i++){
                if(strcmp(te.second.c_str(),vt[i].fname.c_str())==0)
                {
                    int Age=te.first-vt[i].age;
                    vp.push_back(p(Age,vt[i].cname));
                    vector<struct Ted>::iterator it = vt.begin()+i;
                    vt.erase(it);
                }
            }
            temp++;
        }
        sort(vp.begin(),vp.end(),cmp);
        cout<<"DATASET "<<u<<endl;
        for(int i=vp.size()-1;i>=0;i--)
        {
            cout<<vp[i].second<<" "<<vp[i].first<<endl;
        }
        vp.clear();vt.clear();
        u++;
    }
    return 0;

}

缺点:提交的时候会提示Runtime Error,具体原因我还没找出来,但我怀疑是vector执行删除操作或者是数组越界问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值