题意:
第一行输入是在几个商店可以买到饮料
第二行是几个商店的价钱
第三行是他要连续买几天
接下来是第N天的钱数
输出的是可以买几瓶
最一开始我以为比较大小,所以排序,让钱数与他们比较,sum++最后输出sum
但是时间超了
所以这个是二分法
#include<iostream>
#include <algorithm>
using namespace std;
int a[100005];
int main ()
{
int n;int p,m,sum;
while(cin>>n)
{
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);
cin>>m;
while(m--)
{
cin>>p;
int mid,l=0,r=n-1;
while(l<=r)
{
mid=(l+r)/2;//第一点
if(a[mid]<=p)
l=mid+1;
else
r=mid-1;
}
cout<<l<<endl;
}
}
return 0;
}
第一点:
与中间的数比较,如果大于则前面得数加上,再去找后面的中间的数
在比较
这种时间就会少许多。