给你两个砝码, 把其中一个分成两个(整数),用这三个砝码称重量,问最多可以称多少种不同的重量
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <queue>
#include <vector>
#include <math.h>
#include <stack>
#include <map>
#define rtl rt<<1
#define rtr rt<<1|1
typedef long long LL;
using namespace std;
const int MAX = 200+10;
const double eps = 1e-10;
const double PI = acos(-1.0);
int t, a, b, ans, cnt, x, y, z, vis[MAX];
void add(int x)
{
if(x<0)x = -x;
if(!vis[x]&&x)
{
vis[x] = 1;
cnt++;
}
}
int main()
{
scanf("%d", &t);
while(t--)
{
scanf("%d%d", &a, &b);
ans = 0;
for(int i = 1; i<a; ++i)
{
cnt = 0;
memset(vis, 0, sizeof(vis));
x = i;
y = a-i;
z = b;
add(x);
add(y);
add(z);
add(x+y);
add(x+z);
add(y+z);
add(x+y+z);
add(x+y-z);
add(x-y+z);
add(-x+y+z);
add(x-y-z);
add(-x-y+z);
add(-x+y-z);
add(x-y);
add(x-z);
add(y-z);
if(cnt>ans)ans = cnt;
}
for(int i = 1; i<b; ++i)
{
cnt = 0;
memset(vis, 0, sizeof(vis));
x = i;
y = b-i;
z = a;
add(x);
add(y);
add(z);
add(x+y);
add(x+z);
add(y+z);
add(x+y+z);
add(x+y-z);
add(x-y+z);
add(-x+y+z);
add(x-y-z);
add(-x-y+z);
add(-x+y-z);
add(x-y);
add(x-z);
add(y-z);
if(cnt>ans)ans = cnt;
}
printf("%d\n", ans);
}
return 0;
}