POJ3544 - 题看错了..结果WA了很久...

上周去衡阳八中找虐做的题~~也很简单了~~~当时就是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; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值