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