题解 | 螺旋矩阵
螺旋矩阵
https://www.nowcoder.com/practice/c23363730308436394ec4e4dae3ff84c
#include <stdlib.h>
long long min(long long a, long long b, long long c, long long d){
long long m = a;
if( b < m ) m = b;
if( c < m ) m = c;
if( d < m ) m = d;
return m;
}
int main() {
long long n,m,i,j;
scanf("%lld %lld %lld %lld", &n, &m, &i, &j);
long long k = min(i-1, j-1, n-i,m-j);
long long total_before = k * (2 * n + 2* m -4*k);
long long w = m -2*k;
long long h = n - 2* k;
long long ans;
if(w == 1){
ans = total_before + (i-k);
}else if (h == 1) {
ans = total_before + (j - k);
}else {
if (i ==k+1)
{
ans = total_before +(j-k);
}else if (j == m-k) {
ans = total_before + w + (i - k -1);
}else if (i == n-k) {
ans = total_before + w + h -1 + (m-k-j);
}else {
ans = total_before + w + h - 1 + w - 1 +(n-k-i);
}
}
printf("%lld\n",ans);
return 0;
}