源代码: #include<cstdio> #include<algorithm> using namespace std; int n,m; double X[200001],Y[200001],K[200001],B[200001]; bool Check(double T1,double T2,int Mid) //纯纯的数学公式判断,是否存在交点。 { if (K[Mid]*T1+B[Mid]>T2) return false; return true; } int main() { scanf("%d",&n); for (int a=1;a<=n;a++) scanf("%lf",&X[a]); for (int a=1;a<=n;a++) scanf("%lf",&Y[a]); sort(X+1,X+n+1); sort(Y+1,Y+n+1); for (int a=1;a<=n;a++) { B[a]=Y[a]; //截距。 K[a]=-Y[a]/X[a]; //斜率。 } scanf("%d",&m); for (int a=0;a<m;a++) { double T1,T2; scanf("%lf%lf",&T1,&T2); int Left=1,Right=n,Ans=0; while (Left<=Right) //二分答案。 { int Mid=(Left+Right)>>1; if (Check(T1,T2,Mid)) { Left=Mid+1; Ans=Mid; } else Right=Mid-1; } printf("%d ",Ans); } return 0; }