昨天的cf題,差點因爲這道題翻車了,幸好後面力挽狂瀾XD。
一看這道題,一猜,路徑上的數值之和肯定都是不同的,一寫,自信一交,等待1a,wa on pretest 2,gnls,然後找了15分鐘規律猜了個結論過了。
題解的思路是這樣的:
把他想象成一個(借用cf tutorial裏的圖)這個樣子的一個東西,初始狀態是路徑的和最小的那個狀態,你要做的只是每次把他右上角的那個角給他按下去,就是把路徑的和增加了,這樣就能保證沒有重複,可以看出答案就是 dx * dy + 1。
#include <bits/stdc++.h>
#define i64 long long
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.precision(10);
cout << fixed;
#ifdef LOCAL_DEFINE
freopen("input.txt", "r", stdin);
#endif
cin >> tc;
while (tc--) {
cin >> x1 >> y1 >> x2 >> y2;
i64 dx = x2 - x1;
i64 dy = y2 - y1;
i64 ans = dx * dy + 1;
cout << ans << '\n';
}
#ifdef LOCAL_DEFINE
cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
return 0;
}