这题周末的时候去被虐的时候做过但是那时的题目描述和现在不同;
那题是说把猪送城市,输出按猪的顺序到城市的映射,而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;
}