Gym 101606E 【貪心+sort】
阿新 • • 發佈:2018-12-19
#include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<iostream> #define INF 0x3fffffff const int maxn=5000+10; using namespace std; typedef long long ll; struct node{ int c,v,no; }b[maxn]; struct node1{ int ans,no,c; }a[maxn]; bool cmp1(node1 a,node1 b){ return a.c>b.c; } bool cmp2(node a,node b){ if(a.v!=b.v) return a.v<b.v; return a.c>b.c; } bool ccmp(node1 a,node1 b){ return a.no<b.no; } int main(){ int n,m; scanf("%d%d",&n,&m); for(int i=0;i<n;i++){ scanf("%d",&a[i].c);//部門人數 a[i].no=i+1; a[i].ans=0; } for(int i=0;i<m;i++){ scanf("%d",&b[i].c);//房子容量 b[i].no=i+1; } for(int i=0;i<m;i++){ scanf("%d",&b[i].v);//房子價格 } sort(b,b+m,cmp2); sort(a,a+n,cmp1); /*for(int i=0;i<m;i++){ cout<<b[i].c<<" "<<b[i].v<<" "<<b[i].no<<endl; }*/ for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(b[i].c>=a[j].c){ a[j].ans=b[i].no; a[j].c=INF; b[i].v=INF; break; } } } int flag=1; for(int i=0;i<n;i++){ if(a[i].ans==0) flag=0; } if(flag==1){ sort(a,a+n,ccmp); for(int i=0;i<n-1;i++){ printf("%d ",a[i].ans); } printf("%d\n",a[n-1].ans); } else printf("impossible\n"); return 0; }