读清题目就好做了:
1、满意度选最大的k个
2、当满意度相等时,选索引较小的那个
3、按坐标非升序排列
动态分配和静态分配用的时间一样:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
class node
{
public:
double sf;
int ind;
public:
node():sf(0){}
};
bool cmp1(const node &n1,const node &n2)
{
if(n1.sf!=n2.sf)return n1.sf>n2.sf;
else return n1.ind<n2.ind;
}
bool cmp2(const node &n1,const node &n2)
{
return n1.ind>n2.ind;
}
int main()
{
//freopen("in.txt","r",stdin);
int n,m,k;
double tmp;
while(scanf("%d %d %d",&n,&m,&k)!=EOF){
node *arr=new node[m];
//node arr[10000];
//for(int i=0;i<m;++i)arr[i].sf=0;
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
scanf("%lf",&tmp);
arr[j].sf+=tmp;
arr[j].ind=j;
}
}
sort(arr,arr+m,cmp1);
sort(arr,arr+k,cmp2);
for(int i=0;i<k-1;++i)
printf("%d ",arr[i].ind+1);
printf("%d\n",arr[k-1].ind+1);
}
return 0;
}