站外题49pts悬棺求调!!!
  • 板块题目总版
  • 楼主wky_wsy_
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/12/2 22:45
  • 上次更新2024/12/3 16:09:09
查看原帖
站外题49pts悬棺求调!!!
1323415
wky_wsy_楼主2024/12/2 22:45

题目传送门

#include <bits/stdc++.h>
#define int long long
using namespace std;
int N,m,n;
int a[1000][1000];
int b[10000];
void smn(){
    int mc=INT_MAX;
    int im,in;
    for(int i=1;i<=N;i++){
        for(int j=i+1;j<=N;j++){
            if(i*j==N){
                if(j-i<mc){
                    mc=j-i;
                    im=j;
                    in=i;
                }
            }
        }
    }
    ::m=im;
    ::n=in;
}
void dfs(int x,int y,int k,char g){
    //if(k>=N) return ;
    if(x>=1&&x<=m&&y>=1&&y<=n&&a[x][y]==0){
        a[x][y]=b[k];
        if(g=='r'){
            dfs(x,y+1,k+1,'r');
        	dfs(x+1,y,k+1,'d');
        	dfs(x,y-1,k+1,'l');
        	dfs(x-1,y,k+1,'u');
        }
        else if(g=='d'){
            dfs(x+1,y,k+1,'d');
            dfs(x,y+1,k+1,'r');
        	//dfs(x+1,y,k+1,'d');
        	dfs(x,y-1,k+1,'l');
        	dfs(x-1,y,k+1,'u');
        }
        else if(g=='l'){
            dfs(x,y-1,k+1,'l');
            dfs(x,y+1,k+1,'r');
        	dfs(x+1,y,k+1,'d');
        	//dfs(x,y-1,k+1,'l');
        	dfs(x-1,y,k+1,'u');
        }
        else if(g=='u'){
            dfs(x-1,y,k+1,'u');
            dfs(x,y+1,k+1,'r');
        	dfs(x+1,y,k+1,'d');
        	dfs(x,y-1,k+1,'l');
        	//dfs(x-1,y,k+1,'u');
        }
    }
}
bool cmp(int a,int b){
    return a>b;
}
signed main(){
    cin.tie(0);
    cin>>N;
    smn();
    for(int i=1;i<=N;i++) scanf("%lld ",&b[i]);
    sort(b+1,b+1+N,cmp);
    dfs(1,1,1,'r');
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++){
            printf("%lld ",a[i][j]);
        }
        putchar('\n');
    }
    return 0;
}
2024/12/2 22:45
加载中...