1358 - C Celex Update (思维)

题目

思路:一开始我想错方向了,以为是向动态规划一样找递推然后推公式,后来发现其实只要用能得到最大的值减去最小的值就可以得出答案,然后找规律发现先下再右最大,先右再下最小,而且每次两个数相差为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;
	}
}

猜你喜欢

转载自blog.csdn.net/asbbv/article/details/112727470