// y总题解 #include<cstdio> #include<algorithm> usingnamespacestd; constint N = 100000; int n,k; int h[N],w[N]; boolcheck(int mid){ int res = 0; for (int i = 0;i < n;i++){ res += (h[i]/mid)*(w[i]/mid); // res求边长为mid时的块数,h[i]/mid下取整 if (res >= k) returntrue; } returnfalse; } intmain(){ scanf("%d%d",&n,&k); for (int i = 0;i < n;i++) scanf("%d%d",&h[i],&w[i]); int l = 1,r = 1e5; while (l < r){ int mid = (l+r+1) >> 1; if (check(mid)) l = mid; else r = mid - 1; } printf("%d\n",r); return0; }