上周去衡阳八中找虐做的题~~也很简单了~~~当时就是10个点都过了...结果到POJ上交就狂WA..更郁闷的是我到网上搜了好几份别人的解题报告也是WA..我都怀疑题目改数据了...还好狐狸大大指出了题目最后要求的不是按照城市顺序输出对应的猪而是按猪的顺序输出对应的城市~~好吧...AC...
这道题乍一看一一对应啊~~又要是最多啊~~~很容易想到KM...其实也没必要贪心就可以了~~~想~~一圈猪只能去一个地方...并且相同种类的猪在每个城市的价格一样..那为何不把单价能赚最多的城市配上最多的猪~~然后依次到单价最少甚至赔钱最多的分配最少的猪~~城市按单价排序~~猪按个数排序~~再一一对应就完了!
Program:
#include<iostream>
#include<algorithm>
#include<stdio.h>
#define MAXN 1001
using namespace std;
struct p1
{
int w;
long long m;
}d[MAXN];
struct p2
{
int w,num;
}a[MAXN];
int n,i,ans[MAXN];
long long v,t;
bool cmp1(p1 a,p1 b)
{
return a.m<b.m;
}
bool cmp2(p2 a,p2 b)
{
return a.num<b.num;
}
int main()
{
scanf("%d%I64d",&n,&t);
for (i=1;i<=n;i++)
{
a[i].w=i;
scanf("%I64d",&a[i].num);
}
sort(a+1,a+1+n,cmp2);
for (i=1;i<=n;i++)
{
d[i].w=i;
scanf("%I64d",&d[i].m);
d[i].m*=t;
}
for (i=1;i<=n;i++)
{
scanf("%I64d",&v);
d[i].m=v-d[i].m;
}
sort(d+1,d+1+n,cmp1);
for (i=1;i<=n;i++)
ans[d[i].w]=a[i].w;
for (i=1;i<n;i++) printf("%d ",ans[i]);
printf("%d\n",ans[n]);
system("pause");
return 0;
}