原题:https://codeforces.com/contest/1353/problem/C
题意:t组案例,n为奇数,n*n格矩阵中,其他所有位置都要往中心点移动(可沿对角线移动),求总的移动次数。
思路:如图所示,可将目标分解成8块等价的区域,即一块白色区域加一条黄色线。循环以对角线1 9 17为标准,第二次循环为2 10,这样可以用等差数列求和公式计算移动次数(首相为1,项数为(n-1)/2-i+1).
#include <bits/stdc++.h>
using namespace std;
long long t,n,sum,x;
int main()
{
cin>>t;
while(t--)
{
cin>>n;
sum=0;
for(long long i=1; i<=(n-1)/2; i++)
{
sum+=((n-1)/2-i+1)*i+((n-1)/2-i+1)*((n-1)/2-i)/2;
}
sum=sum*8;
cout<<sum<<endl;
}
}