lijiayu_spyz @ 2023-10-10 22:03:36
最后一个答案输出不了,所以点TLE 代码:
#include<bits/stdc++.h>
using namespace std;
long long n,m,sum,z,a[1000001];
int findanswer(int s){
int l=1,r=n;
while(l<r){
int mid=l+(r-1)/2;
if(a[mid]>=s) r=mid-1;
else l=mid+1;
}
if(a[l]==s) return l;
else cout<<"-1";
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
cin>>z;
int l=1,r=n;
while(l<r){
int mid=l+(r-1)/2;
if(a[mid]>=z) r=mid-1;
else l=mid+1;
}
if(a[l]==z) cout<<l<<" ";
else cout<<"-1";
}
return 0;
}
求求大佬救救我
by IceKylin @ 2023-10-10 22:07:30
@lijiayu_spyz
输出 -1
后也要加空格
by Silent_Ltcd_2024 @ 2023-10-10 22:33:31
@lijiayu_spyz
挺多问题的。
一是负一后面要加空格。
二是最好二分使用标准模板,你这个会超时。
正确的:
while(l<=r) {
int mid=(l+r)/2;
if(...) l=mid-1;
else r=mid+1;
}
AC code:
#include<bits/stdc++.h>
using namespace std;
long long n,m,sum,z,a[1000001];
int findanswer(int s){
int l=1,r=n;
while(l<=r){
int mid=(l+r)/2;
if(a[mid]>=s) r=mid-1;
else l=mid+1;
}
if(a[l]==s) return l;
else cout<<"-1";
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
cin>>z;
int l=1,r=n;
while(l<=r){
int mid=(l+r)/2;
if(a[mid]>=z) r=mid-1;
else l=mid+1;
}
if(a[l]==z) cout<<l<<" ";
else cout<<"-1 ";
}
return 0;
}
by Silent_Ltcd_2024 @ 2023-10-10 22:34:14
关注 @CSP_AK_zyz 谢谢喵。
by lijiayu_spyz @ 2023-10-10 22:39:19
@CSP_AK_zyz 感谢!
by lijiayu_spyz @ 2023-10-11 21:09:52
此贴完结