/*题意:将两个砝码中的其中一个分成两块,三块组合最多有几种情况(可以只有一块,或者两块)。
组合情况 i j m 三块砝码
(i+j)-m=m-(i+j) i+j i-j=j-i i j m
(i+m)-j=j-(i+m) i+m i-m=m-i i+j+m
(j+m)-i=i-(j+m) j+m j-m=m-j
*/
#include<string.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int he[405];/*砝码组合质量之和作为序号,来判断改质量是否已经访问过(防止有相同的质量再次使用)*/
int solove(int n,int m);
int main(int argc, char* argv[])
{
int t,n,m,h,max;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
max=solove(n,m);/*当分n的时候,得到最大情况数量*/
h=solove(m,n);/*当分m的时候,得到最大情况数量*/
if(max<h)
max=h;
printf("%d
",max);
}
return 0;
}
int solove(int n,int m)
{
int i,j,max,count,t;
max=count=0;
for(i=1;i<=(n+1)/2;i++)/*因为1-n最后会有一半左右重复*/
{
memset(he,0,sizeof(he));/*每一次砝码新的分法,这个数组需重新初始化*/
count=0;
j=n-i;
t=i+j+m;
if(he[t]==0)
{he[t]=1;count++;}/*如果这个质量没有访问过组合数就加1,然后设置访问过*/
t=abs(i+j-m);
if(he[t]==0)
{he[t]=1;count++;}
t=abs(j+m-i);
if(he[t]==0)
{he[t]=1;count++;}
t=abs(m+i-j);
if(he[t]==0)
{he[t]=1;count++;}
t=i+m;
if(he[t]==0)
{he[t]=1;count++;}
t=i+j;
if(he[t]==0)
{he[t]=1;count++;}
t=j+m;
if(he[t]==0)
{he[t]=1;count++;}
t=abs(i-j);
if(he[t]==0)
{he[t]=1;count++;}
t=abs(i-m);
if(he[t]==0)
{he[t]=1;count++;}
t=abs(j-m);
if(he[t]==0)
{he[t]=1;count++;}
t=i;
if(he[t]==0)
{he[t]=1;count++;}
t=j;
if(he[t]==0)
{he[t]=1;count++;}
t=m;
if(he[t]==0)
{he[t]=1;count++;}
if(he[0]==1)/*如果有组合的结果是0,就不算在内*/
count--;
if(max<count)
max=count;
}
return max;
}