AcWing 459. 螺旋矩阵(数学推导)
原题链接
中等
作者:
NumPy
,
2021-04-05 18:53:14
,
所有人可见
,
阅读 652
数学
$O(1)$
C++ 代码
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long LL;
LL n, i, j;
// 等差数列前n项和 (首项+末项) * 项数 / 2
LL f(LL a1, LL an, LL n){
return n * (a1 + an) / 2;
}
int main(){
cin >> n >> i >> j;
// 算出圈数
LL q = min(min(i, j), min(n - i + 1, n - j + 1));
LL d = -8;
LL a1 = 4 * n - 4;
LL aq = a1 + d * (q - 2); // a(q - 1)
LL ans = f(a1, aq, q - 1);
if(i <= j) ans += i + j - 2 * q + 1; //在右上部分
else ans += (a1 + d * (q - 1) - (i + j - 2 * q + 1) + 2); //在左下部分
cout << ans << endl;
return 0;
}