#32006: 乾...能力不足寫了一整個晚上<附解><不是最佳解>


c110110157@nkust.edu.tw (只解簡單的)

學校 : 國立高雄第一科技大學
編號 : 193832
來源 : [42.77.240.219]
最後登入時間 :
2023-10-29 23:11:33
h075. 成績排名 | From: [114.42.193.227] | 發表日期 : 2022-09-06 05:14

#include<iostream>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;
int main(void){
    int n,a,g,g1,i=0,z,x,c,te;
    float num,avg;
    multiset<float> st;
    cin>> n;
    vector<int> v1,v2,v3,v4;
    pair<int,float> pp[n+1],qq[n];
    float A[n][3];
    for(int i=0;i<n;i++){
        cin >> a;
        for(int j=0;j<3;j++){
            cin>> num;
            A[i][j]=num;
        }
    }
    for(int i=0;i<n;i++){
        avg=(A[i][0]*5+A[i][1]*3+A[i][2]*2)/10;
        pp[i].first=i+1;
        pp[i].second=avg;
        st.insert(avg);
    }
    for(set<float>::iterator it=st.begin();it!=st.end();it++){
        g=0;    
        z=101;
        x=101;
        c=101;
        v1.clear();
        v2.clear();
        v3.clear();
        v4.clear();
        for(int j=0;j<n;j++){
            if(*it==pp[j].second){
                v1.push_back(j);    //存入*it==pp[j].second
            }
        }
        if(v1.size()>1){
            for(int j=0;j<v1.size();j++){
                if(A[v1[j] ][0]<=z){    //
                z=A[v1[j] ][0];
                }
            }for(int j=0;j<v1.size();j++){
                if(A[v1[j] ][0]==z){
                    v2.push_back(v1[j] );
                }
            }
            if(v2.size()>1){
                for(int j=0;j<v2.size();j++){
                    if(A[v2[j] ][1]<=x){    //
                        x=A[v2[j] ][1];
                    }
                }for(int j=0;j<v2.size();j++){
                    if(A[v1[j] ][1]==x){
                        v3.push_back(v2[j] );
                    }
                }
                if(v3.size()>1){
                    for(int j=0;j<v3.size();j++){
                        if(A[ v3[j] ][2]<=c){    //
                            c=A[v2[j] ][2];
                        }
                    }
                    for(int j=0;j<v3.size();j++){
                        if(A[v3[j] ][2]==c){
                        v4.push_back(v3[j] );
                        }
                    }
                    if(v4.size()>1){
                        for(int j=0;j<v4.size();j++){
                        if( pp[v4[j] ].first > g){
                        g=pp[v4[j] ].first;
                        g1=v4[j];
                        }
                    }
                    }else{
                        g1=v4[0];
                        g=pp[ v4[0] ].first;
                    }
                }else{
                    g1=v3[0];
                    g=pp[ v3[0] ].first;
                }    
            }else{
                g1=v2[0];
                g=pp[v2[0] ].first;
            }
        }else{
            g1=v1[0];
            g=pp[ v1[0] ].first;
        }
        qq[i].first=g;
        qq[i].second=pp[g1].second;
        pp[g1].second=101;
        i++;    
    }    
    for(int i=n-1;i>=0;i--){
        te=qq[i].second;
        if((int)(qq[i].second+0.9)!=te){
            printf("%d %.1f\n",qq[i].first,qq[i].second);
        }else{
        printf("%d %d\n",qq[i].first,te);
        }
    }
    return 0;
}

 
#32008: Re: 乾...能力不足寫了一整個晚上<附解><不是最佳解>


406490150@gms.tku.edu.tw (我是朱朱)

學校 : 國立交通大學
編號 : 139794
來源 : [140.113.236.122]
最後登入時間 :
2022-09-03 11:13:16
h075. 成績排名 | From: [36.238.65.21] | 發表日期 : 2022-09-06 13:20

C++應該以"一個人"為單位,用struct或class裝起來,會比較好排序

寫一個通用的排序手法

 
#32014: Re: 乾...能力不足寫了一整個晚上<附解><不是最佳解>


406490150@gms.tku.edu.tw (我是朱朱)

學校 : 國立交通大學
編號 : 139794
來源 : [140.113.236.122]
最後登入時間 :
2022-09-03 11:13:16
h075. 成績排名 | From: [36.238.65.21] | 發表日期 : 2022-09-06 20:35

我用struct + sort + compare fucntion + vector,給你參考

我沒有非常熟悉C++,程式碼可能會有缺失的地方,再麻煩留言指正

 
ZeroJudge Forum