TheSierpinskiFractal(POJ-1941)递推

Posted xxmlala-fff

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TheSierpinskiFractal(POJ-1941)递推相关的知识,希望对你有一定的参考价值。

题意:用‘’,‘/‘,‘_‘按照给定规则画出三角形

题目链接:https://vjudge.net/problem/POJ-1941

思路:题中的三角形生成规则是符合递推关系的,可以先手动完成第一个三角形,再根据题中规律逐级递推,推出每个三角形的图案,需要的时候直接查询即可。

  ??比赛的时候错误计算了数组需要的空间数量。所需列数最大值为4*2^n。

  注:输出时不能用%C,会超时,除此之外,每一行行末多余的空格也时不能输出同时也没必要输出的,因此需要处理图案时在行末手动加上‘‘,再以%s输出。

代码如下:

技术图片
 1 #include<cstdio>
 2 
 3 using namespace std;
 4 struct ha{
 5     int a,h;
 6     char mp[1050][2060];
 7 }aha[11];
 8 int main(){
 9     aha[1].a=4;aha[1].h=2;
10     aha[1].mp[0][0]= ;
11     aha[1].mp[0][1]=/;
12     aha[1].mp[0][2]=\;
13     aha[1].mp[0][3]=;
14     aha[1].mp[1][0]=/;//__\";
15     aha[1].mp[1][1]=aha[1].mp[1][2]=_;
16     aha[1].mp[1][3]=\;
17     aha[1].mp[1][4]=;
18     for(int ii=2;ii<=10;ii++){
19         aha[ii].a=aha[ii-1].a*2;
20         aha[ii].h=aha[ii-1].h*2;
21         for(int i=0;i<aha[ii-1].h;i++){
22             for(int j=0;j<aha[ii-1].a/2;j++)
23                 aha[ii].mp[i][j]= ;
24             for(int j=aha[ii-1].a/2;j<aha[ii-1].a/2+aha[ii-1].a;j++){
25                 char ch=aha[ii-1].mp[i][j-aha[ii-1].a/2];
26                 aha[ii].mp[i][j]=aha[ii-1].mp[i][j-aha[ii-1].a/2];
27                 if(ch==)
28                     aha[ii].mp[i][j]= ;
29             }   
30         }
31         for(int i=aha[ii-1].h;i<aha[ii-1].h*2;i++){
32             for(int j=0;j<aha[ii-1].a;j++){
33                 char ch=aha[ii-1].mp[i-aha[ii-1].h][j];
34                 aha[ii].mp[i][j]=aha[ii-1].mp[i-aha[ii-1].h][j];
35                 if(ch==)
36                     aha[ii].mp[i][j]= ;
37             }
38         }
39         for(int i=aha[ii-1].h;i<aha[ii-1].h*2;i++){
40             for(int j=aha[ii-1].a;j<aha[ii-1].a*2;j++){
41                 char ch=aha[ii-1].mp[i-aha[ii-1].h][j-aha[ii-1].a];
42                 aha[ii].mp[i][j]=aha[ii-1].mp[i-aha[ii-1].h][j-aha[ii-1].a];
43                 if(ch==)    
44                     aha[ii].mp[i][j]= ;
45             }
46         }
47         int x=aha[ii-1].a+1;
48         for(int i=0;i<aha[ii].h;i++){
49             aha[ii].mp[i][x++]=;
50         }
51     }
52     int n;
53     while(scanf("%d",&n)&&n!=0){
54         for(int i=0;i<aha[n].h;i++){
55                 printf("%s",aha[n].mp[i]);
56             printf("
");
57         }
58         printf("
");
59     }
60     return 0;
61 }
By xxmlala

 

以上是关于TheSierpinskiFractal(POJ-1941)递推的主要内容,如果未能解决你的问题,请参考以下文章

POJ 刷题指南

DP50题(转)

POJ题目分类

计算几何专题

计算几何专题

北大ACM - POJ试题分类