zoukankan      html  css  js  c++  java
  • 【PAT甲级】1105 Spiral Matrix (25分)

    题意:
    输入一个正整数N(实则<=1e5),接着输入一行N个正整数(<=1e4)。降序输出螺旋矩阵。

    trick:

    测试点1,3运行超时原因:直接用sqrt(N)来表示矩阵的宽会在N是素数时出错,直接扫一遍找一个最大因子即可,简单粗暴。

    AAAAAccepted code:

     1 #define HAVE_STRUCT_TIMESPEC
     2 #include<bits/stdc++.h>
     3 using namespace std;
     4 int a[100007];
     5 int ans[1007][1007];
     6 int main(){
     7     ios::sync_with_stdio(false);
     8     cin.tie(NULL);
     9     cout.tie(NULL);
    10     int n;
    11     cin>>n;
    12     for(int i=1;i<=n;++i)
    13         cin>>a[i];
    14     int y=0;
    15     for(int i=1;i*i<=n;++i)
    16         if(n%i==0)
    17             y=i;
    18     int x=n/y;
    19     sort(a+1,a+1+n);
    20     int top=1,bottom=x,left=1,right=y;
    21     int temp=n;
    22     int flag=1;
    23     while(temp){
    24         if(flag==1){
    25             for(int i=left;i<=right;++i)
    26                 ans[top][i]=a[temp--];
    27             ++top;
    28             flag=2;
    29         }
    30         else if(flag==2){
    31             for(int i=top;i<=bottom;++i)
    32                 ans[i][right]=a[temp--];
    33             --right;
    34             flag=3;
    35         }
    36         else if(flag==3){
    37             for(int i=right;i>=left;--i)
    38                 ans[bottom][i]=a[temp--];
    39             --bottom;
    40             flag=4;
    41         }
    42         else if(flag==4){
    43             for(int i=bottom;i>=top;--i)
    44                 ans[i][left]=a[temp--];
    45             ++left;
    46             flag=1;
    47         }
    48     }
    49     for(int i=1;i<=x;++i){
    50         for(int j=1;j<=y;++j){
    51             cout<<ans[i][j];
    52             if(j<y)
    53                 cout<<" ";
    54         }
    55         if(i<x)
    56             cout<<"
    ";
    57     }
    58     return 0;
    59 }
    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    poj 2754 Similarity of necklaces 2 转换成多重背包,单调队列优化/ 二进制优化
    new和delete2
    new和delete1
    new和delete4
    new和delete3
    new(placement new)
    用例图中的Actor(参与者)一定是人吗?
    二维数组的函数参数传递
    二维指针动态创建二维数组(C/C++)
    OOD的五项基本原则——SOLID
  • 原文地址:https://www.cnblogs.com/ldudxy/p/11985361.html
Copyright © 2011-2022 走看看