2680: 硬币 【创客节】二分查找
include <bits/stdc++.h>
using namespace std;
int n, m, k, a[1000005], b[1000005], sum, t, l, r, mid;
int main( )
{
cin >> n >> m >> k;
for (int i=1;i<=n;i++)
{
cin >> a[i];
}
for (int i=1;i<=m;i++)
{
cin >> b[i];
}
sort(a+1,a+n+1);
sort(b+1,b+m+1);
for (int i=1;i<=n;i++)
{
t=k-a[i];
l=1;
r=m+1;
if (t>0)
{
while(l<r)
{
mid=(l+r)/2+r;
if (t>=b[mid])
{
l=mid+1;
}
else
{
r=mid-1;
}
}
}
sum+=l-1;
}
return 0;
}
反思:正确的方法是用二分法或者利用数组下标
时间超限注意这个 sum+=l-1;移到IF中