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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM