基本步骤就是先按照weight排一次序,再按增加了额外的权值后再排一次序就好了,注意对应关系,简单的结构体排序。
#include <iostream> #include <cmath> #include <stdio.h> #include <cstring> #include <algorithm> #include <cstring> using namespace std; int extra[15] ; typedef struct{ int weight ; int number ; }meassage ; bool cmp( meassage a , meassage b ){ if ( a.weight == b.weight ){ return a.number < b.number ; } return a.weight > b.weight ; } int main(){ int n , k ; cin >> n >> k ; meassage mea[n+10] ; for ( int i = 0 ; i < 10 ; i ++ ){ cin >> extra[i] ; } for ( int i = 0 ; i < n ; i ++ ){ cin >> mea[i].weight ; mea[i].number = i + 1 ; } sort(mea , mea + n , cmp) ; for ( int i = 0 ; i < n ; i ++ ){ mea[i].weight += extra[i % 10] ; } sort(mea , mea + n , cmp) ; for ( int i = 0 ; i < k ; i ++ ){ cout << mea[i].number << " "; } return 0 ; }
原文:https://www.cnblogs.com/Cantredo/p/9733350.html