求大神帮看看为啥出错
查看原帖
求大神帮看看为啥出错
156042
王半仙楼主2024/10/4 20:44
#include <bits/stdc++.h>
using namespace std;

struct Node{
	int v,id;
	bool used;
	bool operator<(const Node & t)const{
		if(v == t.v) return id < t.id;
		return v < t.v;
	}
}a[10],b[10]; 
int n,k,rk[10],ans[10];

int main(){
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i].v);
		a[i].id = i;
	}
	for(int i=1;i<=k;i++){
		scanf("%d",&b[i].v);
		b[i].id = i;
	}
	sort(a+1,a+1+n);
	sort(b+1,b+1+k);
	for(int i=1;i<=k;i++){
		rk[b[i].id] = i;
	}
	for(int i=1;i<=k;i++){
		int z = rk[i];//b原来第i个在排序后是第z个 
		int bb = z + n - k;//a和b需要后面对齐 
		int m = 0x7f7f7f7f;
		int x = 0;
		for(int j=1;j<=n;j++){
			if(j>bb && b[j-n+k].v > a[bb].v){
				break;
			}
			if(!a[j].used && a[j].v>=b[z].v && a[j].id<m){
				m = a[j].id;//找一个能满足要求的id最小的。 
				x = j;
			}
		}
		a[x].used = true;//用过就标记上 
		if(x == 0){//没有找到能满足条件的输出-1 
			printf("-1\n");
			return 0;
		}
		ans[i] = m;//记录找到的最小id 
	}
	for(int i=1;i<=k;i++)
		printf("%d ",ans[i]);
	return 0;
} 

用贪心方法写的,这种方法哪里有问题?? 为啥回出错啊

2024/10/4 20:44
加载中...