zoukankan      html  css  js  c++  java
  • 【xsy1097】 拼图 构造题

    题目大意:请你使用n个图形拼成一个矩形。要求:①这每个图形都由1×1的小正方形组成,而且第i个图形由i个小正方形组成。②除了第1个和第2个图形以外,任意一个图形的所有小正方形,不都在一条直线上。

    数据范围:n≤1000

    当n为奇数时,我们这么构造:

    当n为偶数时,我们n为奇数的基础上,在原矩阵下方加多两排n就好了。

     1 #include<bits/stdc++.h>
     2 #define M 2005
     3 using namespace std;
     4 
     5 int a[M][M]={0};
     6 
     7 int main(){
     8     int n,m; scanf("%d",&n); m=(n+1)/2;
     9     int hh=0; if(n%2==0) hh=1,n--;
    10     for(int i=1;i<=m;i++) a[n+1][i]=a[n+2][i]=n+1;
    11     for(int x=n,i=1;x>m;x--,i++){
    12         int nowx=i+1,nowy=i;
    13         for(int j=1;j<=x;j++,nowx++){
    14             if(a[nowx][nowy]) nowx--,nowy++;
    15             a[nowx][nowy]=x;
    16         }
    17     }
    18     for(int x=m,i=1;x>0;x--,i+=2){
    19         int nowx=1,nowy=i;
    20         for(int j=1;j<=x;j++,nowx++){
    21             if(a[nowx][nowy]) nowx--,nowy++;
    22             a[nowx][nowy]=x;
    23         }
    24         x--;
    25         for(int j=1;j<=x;j++,nowx++){
    26             if(a[nowx][nowy]) nowx--,nowy++;
    27             a[nowx][nowy]=x;
    28         }
    29     }
    30     printf("%d %d
    ",n+(hh*2),m);
    31     for(int i=1;i<=n+(hh*2);i++,printf("
    "))
    32     for(int j=1;j<=m;j++) printf("%d ",a[i][j]);
    33 }

     

  • 相关阅读:
    linux 内存映射-ioremap和mmap函数
    vue 模板语法-插值的操作(12-22)
    chrome浏览器json插件
    vue初识(1-11)2020-10-27
    后盾人:JS课程第一章(11-18)2020-10-25
    博客园美化
    chrome 设置自动刷新网页
    二叉树的层次遍历
    poj 2905 双向队列(待补充)
    poj 2159 D
  • 原文地址:https://www.cnblogs.com/xiefengze1/p/10399018.html
Copyright © 2011-2022 走看看