这题周末的时候去被虐的时候做过但是那时的题目描述和现在不同;
那题是说把猪送城市,输出按猪的顺序到城市的映射,而POJ的题目却是按城市的顺序输出猪。
明显的,我们可以得到单位的重量的猪送到每个城市挣的钱,这样有个排序。
将猪的重量排序这样又有一个排序。于是乎... 重的猪挣大钱,轻的猪挣小钱。按照桶排序一一映射。
再顺序输出就OK了~
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#define MAXN 1001
using namespace std;struct Node
{__int64 pig;__int64 num;
}P[MAXN];struct City
{__int64 city;__int64 cos,get,per;
}C[MAXN];__int64 num[MAXN],cos[MAXN],get[MAXN],per[MAXN];
int ans[MAXN];bool cmp1( Node a,Node b ){return a.num>b.num;
}
bool cmp2( City a,City b ){return a.per>b.per;
}int main()
{int n,t;while( scanf( "%d %d",&n,&t )!=EOF ){for( int i=1;i<=n;i++ ){scanf( "%I64d",&P[i].num );P[i].pig=i;}for( int i=1;i<=n;i++ ){scanf( "%I64d",&C[i].cos );C[i].cos*=t;}for( int i=1;i<=n;i++ ){scanf( "%I64d",&C[i].get );C[i].per=C[i].get-C[i].cos;C[i].city=i;}sort( P+1,P+1+n,cmp1 );sort( C+1,C+1+n,cmp2 );for( int i=1;i<=n;i++ ){ans[C[i].city]=P[i].pig;}for( int i=1;i<n;i++ )printf( "%d ",ans[i] );printf( "%d\n",ans[n] );}return 0;
}