zoukankan      html  css  js  c++  java
  • PAT (Advanced Level) 1105. Spiral Matrix (25)

    简单模拟。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<map>
    #include<queue>
    #include<string>
    #include<algorithm>
    using namespace std;
    
    const int maxn=10000+10;
    int N,a[maxn];
    int ans[maxn];
    int m,n;
    int dir[4][2];
    
    void f()
    {
        dir[0][0]=0;dir[0][1]=1;
        dir[1][0]=1;dir[1][1]=0;
        dir[2][0]=0;dir[2][1]=-1;
        dir[3][0]=-1;dir[3][1]=0;
    }
    
    bool cmp(const int&a,const int&b)
    {
        return a>b;
    }
    
    int main()
    {
        scanf("%d",&N);
        f();
        for(int i=1;i<=N;i++) scanf("%d",&a[i]);
        sort(a+1,a+1+N,cmp);
    
        for(int i=sqrt(1.0*N);i>=1;i--)
            if(N%i==0){n=i,m=N/i;break;}
    
        memset(ans,-1,sizeof ans);
        for(int i=1;i<=m;i++)
            for(int j=1;j<=n;j++)
                ans[(i-1)*n+j]=0;
    
        int nowDir=0;
        int nowX=1,nowY=1;
        for(int i=1;i<=N;i++)
        {
            ans[(nowX-1)*n+nowY]=a[i];
            int NewX=nowX+dir[nowDir][0];
            int NewY=nowY+dir[nowDir][1];
            if(ans[(NewX-1)*n+NewY]!=0||NewX<=0||NewX>=m+1||NewY<=0||NewY>=n+1) nowDir=(nowDir+1)%4;
            nowX=nowX+dir[nowDir][0];
            nowY=nowY+dir[nowDir][1];
        }
        int num=1;
       // for(int i=1;i<=m*n;i++) printf("%d ",ans[i]);
    
        for(int i=1;i<=m;i++)
            for(int j=1;j<=n;j++)
            {
                printf("%d",ans[num++]);
                if(j<n) printf(" ");
                else printf("
    ");
            }
        return 0;
    }
  • 相关阅读:
    linux学习笔记---grep
    node.js读取到的文件列表
    node 按行读取文件
    NodeJS遍历文件生产文件列表
    常用linux命令行
    2017/11/13
    Linux下输出 excel文件
    位映射对大数据的排重
    算法中的渐进记号
    KMP算法原理
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5642453.html
Copyright © 2011-2022 走看看