游客 Signup | Login
中文 | En

2212 - 将棋

世界上有4大棋类:中国象棋,国际象棋,围棋、日本将棋。

下面先介绍一下日本将棋的规则:

将棋的棋盘是一个由10条横线及10条竖线相交的方格阵,而棋子则置于方格之内,也就 是99行的棋盘。靠近自己的3列是本阵,远离自己而靠近对手的3列是敌阵。

将棋的棋子呈钟形,前端较尖。和中国象棋及国际象棋不同,将棋是以棋子前端的指的方向来区别所属。将棋共有八种棋子,分别为王将、飞车、角行、金将、银将、桂马、香车、步兵。每种棋子均有独特的简称及走法。

Miaowu最近在学日本将棋,他看到其中“银将”的走法是:可以向左前,前,右前,左后,右后,走一格。

这时候他在想,如果这时候在一个无穷大的棋盘内,告诉你银将的初始位置和终止位置,问最少要移动多少次才能将他初始位置移动到终止位置呢?

Input

第一行输入一个数T,表示测试数据个数,对于每组数据,输入四个数,x1,y1,x2,y2(-10^9<=x1,y1,x2,y2<=10^9)

Output

对于每组数据,输出一个数,表示最少的移动次数。

Examples

Input

2
1 0 1 9
0 0 -4 3

Output

9
5

Solution C++

#include<stdio.h>
int jdz(int x)
{
    if(x>=0) return x;
    else return -x;
}
int main()
{
    int x1,x2,y1,y2,T,x;
    scanf("%d",&T);
    while(T--)
    {
        int x=0,y=0,n=0;
        scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
        x=x2-x1;
        y=y2-y1;
        if(y>0)
        {
            n=jdz(x);
            if(n==y) printf("%d\n",n);
            else if(n<y) printf("%d\n",y);
            else
            {
                if(n==1) printf("2\n");
                else
                {
                    if((n+y)%2==0) printf("%d\n",n);
                    else printf("%d\n",n+1);
                }
            }
        }
        else if(y<0)
        {
            n=jdz(x);
            y=jdz(y);
            if(n==y) printf("%d\n",n);
            else if(n<y)
            {
                if((n+y)%2==0) printf("%d\n",y);
                else printf("%d\n",y+2);
            }
            else
            {
                if(n==1) printf("2\n");
                else
                {
                    if((n+y)%2==0) printf("%d\n",n);
                    else printf("%d\n",n+1);
                }
            }
        }
        else
        {
            n=jdz(x);
            if(n%2==1) printf("%d\n",n+1);
            else printf("%d\n",n);
        }
    }
    return 0;
}
Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题