60分求助!
  • 板块P1752 点菜
  • 楼主STUDENT00
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/10/29 11:53
  • 上次更新2023/10/27 05:13:43
查看原帖
60分求助!
658786
STUDENT00楼主2022/10/29 11:53

代码很好理解的:

#include<bits/stdc++.h>
using namespace std;
int n,m,p,q,ex[50010],ch[50010],ans,be[200010],pr[200010];
struct Food1{
	int k,be;
} food1[200010];
struct Food2{
	int k,pr;
} food2[200010];
bool vis[200010];
bool cmp1(Food1 a,Food1 b){
	return a.be<b.be;
}
bool cmp2(Food2 a,Food2 b){
	return a.pr<b.pr;
}
int main(){
	scanf("%d%d%d%d",&n,&m,&p,&q);
	for(int i=1;i<=m;i++){
		scanf("%d%d",&food1[i].be,&food2[i].pr);
		food1[i].k=food2[i].k=i;
	}
	sort(food1+1,food1+m+1,cmp1);
	for(int i=1;i<=m;i++) be[i]=food1[i].be;
	sort(food2+1,food2+m+1,cmp2);
	for(int i=1;i<=m;i++) pr[i]=food2[i].pr;
	for(int i=1;i<=p;i++) scanf("%d",&ex[i]);
	for(int i=1;i<=q;i++) scanf("%d",&ch[i]);
	sort(ex+1,ex+p+1);
	sort(ch+1,ch+q+1);
	int s=0;
	while(s<m){
		ans++;
		for(int i=1;i<=p;i++){
			int t=lower_bound(be+1,be+m+1,ex[i])-be;
			while(t<=m&&vis[food1[t].k]) t++;
			if(t<=m) vis[food1[t].k]=1,s++;
		}
		for(int i=1;i<=q;i++){
			int t=upper_bound(pr+1,pr+m+1,ch[i])-pr-1;
			while(t>=1&&vis[food2[t].k]) t--;
			if(t>=1) vis[food2[t].k]=1,s++;
		}
		s+=n-p-q;
		if(ans>m){
		    printf("-1");
		    return 0;
		}
	}
	printf("%d",ans);
	return 0;
}

TLE是肯定的,但是至于WA是怎么回事?

2022/10/29 11:53
加载中...