非常奇怪
查看原帖
非常奇怪
661595
a2lyaXNhbWUgbWFyaXNh楼主2022/7/22 15:22

我写了两版代码,一版MLE一版RE……

改了一天了,还请神犇帮忙指出问题(悬赏gz)

RE code:

#include<bits/stdc++.h>
using namespace std;
int a[1000010],n,q,m;
int p;
void find(int l,int r,int x) {
	while(l<r) {
		int mid=(l+r)/2;
		if(a[mid]<=x) {
			l=mid;
			find(l,r,x);
		} else {
			r=mid;
			find(l,r,x);
		}
	}
	if(a[l]!=x)p=-1;
	else p=l;
}
int main() {
	scanf("%d %d",&n,&m);
	for(int i=1; i<=n; i++)scanf("%d ",&a[i]);
	for(int i=1; i<=m; i++) {
		scanf("%d %d",&q);
		find(1,n+1,q);
		printf("%d ",p);
	}
	return 0;
}

MLE code:

#include<bits/stdc++.h>
using namespace std;
int a[1000010],n,q,m;
int read() {
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9') {
        if(ch=='-')f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9') {
        x=(x<<1)+(x<<3)+(ch^48);
        ch=getchar();
    }
    return x*f;
}
void write(int x) {
    if(x<0)putchar('-'),x=-x;
    if(x>9)write(x/10);
    putchar(x%10 +'0');
}
int find(int l,int r,int x) {
    int mid;
    while(l<r) {
        mid=(l+r)/2;
        if(a[mid]<=x) {
            l=mid;
            find(l,r,x);
        } else {
        	r=mid;
        	find(l,r,x);
		}
    }
    if(a[l]!=x)return -1;
    else return l;
}
int main() {
    n=read();
    m=read();
    for(int i=1; i<=n; i++)a[i]=read();
    for(int i=1; i<=m; i++)q=read();
    for(int i=1; i<=m; i++) {
        write(find(1,n,q));
        printf(" ");
    }
    return 0;
}
2022/7/22 15:22
加载中...