HDU 1263 水果

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Datura0822/article/details/52890436

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1263

结构体排序

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<iostream>
using namespace std;
struct node
{
    string fruit;
    string dic;
    int num;
} pai[200];

int cmp(node p,node q)//先按产地字母序排,如果产地一样,按水果类别字母序排
{
    if(p.dic==q.dic) return p.fruit<q.fruit;
    else return p.dic<q.dic;
}
int main()
{
    int ca;
    cin >> ca;
    while(ca--)
    {
        int n;
        cin >> n;
        for(int i=0; i<n; i++)
        {
            cin >> pai[i].fruit >> pai[i].dic >> pai[i].num;
        }
        sort(pai,pai+n,cmp);
        cout << pai[0].dic << endl;//输出第一个产地
        int sum=pai[0].num;//记录第一种水果的num
        for(int i=1; i<n; i++)
        {
            if(pai[i].dic!=pai[i-1].dic)//碰到下一个产地,输出当前水果名及其sum,并更新sum,输出产地名
            {
                cout << "   |----" << pai[i-1].fruit << "(" << sum << ")" << endl;
                sum=pai[i].num;
                cout << pai[i].dic << endl;
            }
            else
            {
                if(pai[i].fruit!=pai[i-1].fruit)//碰到下一种水果,输出当前水果名及其sum,并更新sum
                {
                    cout << "   |----" << pai[i-1].fruit << "(" << sum << ")" << endl;
                    sum=pai[i].num;
                }
                else sum+=pai[i].num;//同一种水果累加num
            }
        }
        cout << "   |----" << pai[n-1].fruit << "(" << sum << ")"<<endl;//输出最后一种水果名及其sum
        if(ca!=0) cout << endl;//注意输出格式,两组测试数据之间有一个空行,最后一组测试数据之后没有空行
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Datura0822/article/details/52890436