思路:一开始我想错方向了,以为是向动态规划一样找递推然后推公式,后来发现其实只要用能得到最大的值减去最小的值就可以得出答案,然后找规律发现先下再右最大,先右再下最小,而且每次两个数相差为1 2 3 … x … x…3 2 1但是会到达一个峰值–min(x2-x1,y2-y1),维持这个峰值,再递减回到1,答案等于(1+2+…+x-1)*2+(x2+y2-x1-y1-1)*x。
#include<iostream>
#include<string>
#include<map>
#include<algorithm>
#include<memory.h>
#include<cmath>
#define pii pair<int,int>
#define FAST ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
typedef long long ll;
const int Max = 2e5 + 5;
int lst[Max];
int main()
{
int t;cin >> t;
while (t--)
{
ll a, b, c, d;cin >> a >> b >> c >> d;
ll c1 = c - a, c2 = d - b;
ll cc = min(c1, c2);
ll ans = 1;
ans += cc * (cc - 1);
ans += (c1 + c2 -1 - 2 * (cc-1)) * cc;
cout << ans << endl;
}
}