答案 ans a n s 成立,当且仅当 ⌊aans⌋<⌊bans⌋ ⌊ a a n s ⌋ < ⌊ b a n s ⌋ 且 ⌊cans⌋<⌊dans⌋ ⌊ c a n s ⌋ < ⌊ d a n s ⌋
按 ⌊aans⌋⌊bans⌋⌊cans⌋⌊dans⌋ ⌊ a a n s ⌋ ⌊ b a n s ⌋ ⌊ c a n s ⌋ ⌊ d a n s ⌋ 的值分块(值都一样的在一块),相同块内直接跳到块尾就可以了
代码如下:
#include<algorithm>
#include<ctype.h>
#include<cstdio>
using namespace std;
inline int read(){
int x=0,f=1;char c;
do c=getchar(),f=c=='-'?-1:f; while(!isdigit(c));
do x=(x<<3)+(x<<1)+c-'0',c=getchar(); while(isdigit(c));
return x*f;
}
int T,a,b,c,d,pos,ans;
int main(){
T=read();
while(T--){
a=read();b=read();c=read();d=read();
a--;c--;
if(d<b) swap(a,c),swap(b,d);
for(int i=1;i<=b;i=pos+1){
pos=min(b/(b/i),d/(d/i));
if(i<=a) pos=min(a/(a/i),pos);
if(i<=c) pos=min(c/(c/i),pos);
if(a/i<b/i && c/i<d/i) ans=pos;
}
printf("%d\n",ans);
}
return 0;
}