1105. Spiral Matrix (25)

来源:互联网 发布:react json转array 编辑:程序博客网 时间:2024/04/30 01:15
#include <bits/stdc++.h>using namespace std;int arr[10001][10001];bool cmp(const int a, const int b){    return a > b;}int main(void){    int p;    cin >> p ;    vector<int> ar(p);    int i, m, j, n, t = 0;    for (i = 0; i < p; i++)    {        cin >> ar[i];    }    int temp = sqrt(p);    for (; temp <= p; temp++)    {        if (p % temp == 0)        {            m = temp;            n = p / temp;            break;        }     }    int tmp;    if (m < n)    {        tmp = m;        m = n;        n = tmp;    }    sort(ar.begin(), ar.end(), cmp);    int ymax = m, xmax = n;    int xmin = 0, ymin = 1;    i = j = 0;    while (t != p)    {        for (j = xmin; j < xmax; j++)        {            arr[i][j] = ar[t++];        }        if (t == p) break;        xmax--;        j--;        for (i = ymin; i < ymax; i++)        {            arr[i][j] = ar[t++];        }        if (t == p) break;        ymax--;        i--;        for (j = xmax - 1; j >= xmin; j--)        {            arr[i][j] = ar[t++];        }        if (t == p) break;        xmin++;        j++;        for (i = ymax - 1; i >= ymin; i--)        {            arr[i][j] = ar[t++];        }        if (t == p) break;        ymin++;        i++;    }    for (i = 0; i < m; i++)    {        for (j = 0; j < n - 1; j++)        {            cout << arr[i][j] <<" ";         }        cout << arr[i][j] << endl;    }}

弄清楚循环上下界就好了。