【链接】:https://acm.ecnu.edu.cn/contest/59/problem/B/
Time limit per test: 2.0 seconds
Memory limit: 256 megabytes
蛇形矩阵是我最喜欢的矩阵之一。n 阶蛇形矩阵由前 n2 个正整数顺时针从外到内盘绕而成。
例如四阶具有如下形式:
1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7
五阶(奇数阶数)在中心位置略有不同:
1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9
由于这种盘绕的方式过分诡异,无法简单的用数学语言表示。所以无聊又过分的出题人想让你算出这个矩阵每一行的和。
Input
输入一个整数 n (1≤n≤200 000)。
Output
输出 n 行 n 个整数,依次为每一行的和。
Examples
4
10 44 48 34
5
15 76 91 88 55
1
1
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N=200005; ll a[N]; int main() { int n; cin>>n; ll l=1,r=n,f=n,s=0; a[1]=(l+r)*f/2; a[n]=a[1]+(f-1)*2*f; for(int i=2;i<=(n+1)/2;i++) { s+=r; l+=4*f-4,f=f-2,r=l+f-1; s+=l; a[i]=s+(l+r)*f/2; a[n-i+1]=a[i]+(f-1)*2*f; } for(int i=1;i<=n;i++) cout<<a[i]<<"\n"; }