其他分享
首页 > 其他分享> > PTAt147 节约有理(结构体排序)

PTAt147 节约有理(结构体排序)

作者:互联网

为什么会WA呢?

题目:

小明准备考研,要买一些书,虽然每个书店都有他想买的所有图书,但不同书店的不同书籍打的折扣可能各不相同,因此价格也可能各不相同。因为资金所限,小明想知道不同书店价格最便宜的图书各有多少本,以便节约资金。

输入格式:

首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。 对于每组测试,第一行先输入2个整数m,n(1≤m,n≤100),表示想要在m个书店买n本书;第二行输入m个店名(长度都不超过20,并且只包含小写字母),店名之间以一个空格分隔;接下来输入m行数据,表示各个书店的售书信息,每行由小数位数不超过2位的n个实数组成,代表对应的第1至第n本书的价格。

输出格式:

对于每组测试数据,按要求输出m行,分别代表每个书店的店名和能够提供的最廉价图书的数量,店名和数量之间留一空格。当然,比较必须是在相同的图书之间才可以进行,并列的情况也算。 输出要求按最廉价图书的数量cnt从大到小的顺序排列,若cnt相同则按店名的ASCII码升序输出。

输入样例:

1
3 3
xiwangshop kehaishop xinhuashop
11.1 22.2 33.3
11.2 22.2 33.2
10.9 22.3 33.1
 

输出样例:

xinhuashop 2
kehaishop 1
xiwangshop 1
#include<iostream>
#include<algorithm>
using namespace std;
struct shop{
    string name;double a[150];int cnt;
};
shop shops[150];
bool cmp(shop s,shop t){
    if(s.cnt!=t.cnt)return s.cnt>t.cnt;
    else return s.name<t.name;
}
void run(){
    int m,n;cin>>m>>n;
    for(int i=1;i<=m;i++)cin>>shops[i].name;
    for(int i=1;i<=m;i++){
        shops[i].cnt=0;
        for(int j=1;j<=n;j++){
            cin>>shops[i].a[j];
        }
    }
    for(int i=1;i<=n;i++){
        int pos=1;
        for(int j=2;j<=m;j++){
            if(shops[j].a[i]<=shops[pos].a[i])pos=j;
        }
        for(int k=1;k<=m;k++){
            if(shops[k].a[i]==shops[pos].a[i])shops[k].cnt++;
        }
    }
    sort(shops+1,shops+n+1,cmp);
    for(int i=1;i<=m;i++){
        cout<<shops[i].name<<' '<<shops[i].cnt<<endl;
    }
}
int main(){
    int t;cin>>t;
    while(t--){
        run();
    }
    return 0;
}

 

标签:shop,cnt,书店,int,店名,PTAt147,排序,输入,有理
来源: https://www.cnblogs.com/Candyk8d9/p/15488756.html