输入描述: 本题为多组测试数据,第一行输入一个正整数 T(1 ≤ T ≤1000),代表测试数据组数。 对于每组测试数据,第一行输入两个正整数 n,m(1 ≤ n,m<1000),代表小伙伴数量 以及剧组中角色数量。 第二行输入n个正整数a1,a2,...,an(1< a; ≤100),代表每个人心中想要找的角色在戏 中最少要拥有的戏份值。 第三行输入m个正整数, b1,b2,...,bm(1 ≤ b; ≤100),代表剧组剩 余的每个角色的戏份值。 输出描述: 对于每组测试数据,在一行内输出n个整数, 依次代表每个小伙伴可以选择哪个角色,如果某 个小伙伴没有可以和他搭配的角色编号,则输出 -1. 如果含有多种方案,请任意输出一种满足要求的 即可。 输入 1 3 6 33 66 99 3 6 9 30 60 90 输出 5 6 -1
#include<bits/stdc++.h> typedef long long int ll; using namespace std; struct node{ int x,y; friend bool operator<(node a,node b) { return a.x>b.x;//按x从小到大排 } }; int main(){ int n; cin>>n; node a; while(n--){ int m,k; cin>>m>>k; vector<node> p; vector<node> q; vector<int> res(m,-1); for(int i=0;i<m;i++){ cin>>a.x; a.y=i+1; p.push_back(a); } for(int i=0;i<k;i++){ cin>>a.x; a.y=i+1; q.push_back(a); } sort(p.begin(),p.end()); sort(q.begin(),q.end()); int ix=0,iy=0; while(ix<m&&iy<k){ if(p[ix].x>q[iy].x){ ix++; } else{ res[p[ix].y-1]=q[iy].y; ix++; iy++; } } for(int i=0;i<m;i++){ cout<<res[i]<<" "; } cout<<endl; } }