著名的折纸问题:给你一张很大的纸,对折以后再对折,再对折……每次对折都是从右往左折,因此在折了很多次以后,原先的大纸会变成一个窄窄的纸条。现在把这个纸条沿着折纸的痕迹打开,每次都只打开“一半”,即把每个痕迹做成一个直角,那么从纸的一端沿着和纸面平行的方向看过去,会看到一条美妙的曲线。

就是一个分形,规定一下,纸的朝向,然后不难发现规律。

实现方面,可以迭代也可递归。

在图形输出方面,存下x和y坐标,然后下标排个序,或者用map。

//Rey 2015.8.3
#include<bits/stdc++.h>
using namespace std; // r -> rl -> open -> ru
// -> rlrl -> open -> r ud l -> open -> ru lu
// -> rlrlrlrl -> open -> r ud lr ud l -> open -> ru ludr dl -> rulu ldlu
// -> rlrlrlrlrlrlrlrl -> r ud lr ud lr ud lr ud l -> ru const int maxn = ;
const int maxL = (<<)+;
int dir[maxL];
int Rotate[maxL];
int r[maxL];
int x[maxL],y[maxL];
// up right down left
// 0 1 2 3
int dx[] = {-,,, };
int dy[] = { ,,,-};
int mx[] = { ,,, };
int my[] = { ,,,-};
char decode[] = {'|','_','|','_'}; bool cmp(int a,int b) { return x[a] < x[b] || ( x[a] == x[b] && y[a] < y[b] ); } void solve(int n)
{
int N = (<<n);
// fold
for(int i = , tmp[] = {,}; i < N; i++) dir[i] = tmp[i&];
memset(Rotate,,sizeof(int)*N);
//open
//mark
for(int i = ; i <= n; i++) {
int seg = <<i;
for(int j = <<(i-); j < N; j += seg<<){
for(int k = ; k < seg && j+k < N; k++)
Rotate[j+k]++;
}
} //rotate and calculate position
int minx = ,miny = ;
x[] = y[] = ;
for(int i = ; i < N; i++){
int &u = dir[i] , u2 = dir[i-];
u = (u + Rotate[i])%;
x[i] = x[i-] + dx[u2] + mx[u] ;
y[i] = y[i-] + dy[u2] + my[u] ;
minx = min(minx,x[i]);
miny = min(miny,y[i]);
}
//normalize
for(int i = ; i < N; i++){
x[i] -= minx;
y[i] -= miny;
} for(int i = ; i < N; i++) r[i] = i;
sort(r,r+N,cmp); int prex = ,prey = -;
for(int i = ; i < N; i++){
int id = r[i];
if(x[id] != prex) putchar('\n'),prey = -;
for(int j = prey+; j < y[id]; j++) putwchar(' ');
putchar(decode[dir[id]]);
prey = y[id]; prex = x[id];
}
printf("\n^\n");
} int main()
{
// freopen("out.txt","w",stdout);
int n;
while(scanf("%d",&n),n){
solve(n);
}
return ;
}

UVA 177 PaperFolding 折纸痕 (分形,递归)的更多相关文章

  1. 折纸问题java实现

    /** * 折纸问题 这段代码写的太low了 本人水平有限 哎... 全是字符串了 * @param n * @return * @date 2016-10-7 * @author shaobn */ ...

  2. CSS3实现文字折纸效果

    CSS3实现文字折纸效果 效果图: 代码如下,复制即可使用: <!DOCTYPE html> <html> <head> <title></tit ...

  3. 嵊州D5T2 折纸 folding

    折纸 folding [问题描述] 在非常紧张的 NOIP 考试中,有人喜欢啃指甲,有人喜欢转铅笔,有人喜欢撕 纸条,……而小 x 喜欢迷折纸. 现有一个 W * H 的矩形纸张,监考老师想知道,小 ...

  4. 折纸(folding)

    问题 C: 折纸 时间限制: 1 Sec  内存限制: 128 MB[提交] [状态] 题目描述 现有一个W*H的矩形纸张,求至少要折多少次才能使矩形纸张变成w*h的矩形纸张.注意,每次的折痕都要平行 ...

  5. CSS3写折纸

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  6. 【BZOJ】1074: [SCOI2007]折纸origami

    http://www.lydsy.com/JudgeOnline/problem.php?id=1074 题意:一开始有一个左上角是(0,100),右下角是(100,0)的纸片,现在可以沿有向直线折n ...

  7. 1074: [SCOI2007]折纸origami - BZOJ

    Description 桌上有一张边界平行于坐标轴的正方形纸片,左下角的坐标为(0,0),右上角的坐标为(100,100).接下来执行n条折纸命令.每条命令用两个不同点P1(x1,y1)和P2(x2, ...

  8. 1074: [SCOI2007]折纸origami

    Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 372  Solved: 229[Submit][Status][Discuss] Descriptio ...

  9. 紫书 习题8-5 UVa 177 (找规律)

    参考了https://blog.csdn.net/weizhuwyzc000/article/details/47038989 我一开始看了很久, 拿纸折了很久, 还是折不出题目那样..一脸懵逼 后来 ...

随机推荐

  1. Spring入门第十四课

    基于注解的方式配置bean(基于注解配置Bean,基于注解来装配Bean的属性) 在classpath中扫描组件 组件扫描(component scanning):Spring能够从classpath ...

  2. MySQL8.0.16新特性:The Communication Protocol In Group Replication

    MGR优雅升级到MySQL8.0.16 传统的升级手段之一,5.7 MGR集群与8.0 MGR集群进行数据传输,程序切换新集群后测试是否正常. 如果不正常,要么将新集群的新增数据同步回旧集群,要么就舍 ...

  3. python3 Flask安装

    虚拟环境 建议在开发环境和生产环境下都使用虚拟环境来管理项目的依赖. 为什么要使用虚拟环境?随着你的 Python 项目越来越多,你会发现不同的项目会需要 不同的版本的 Python 库.同一个 Py ...

  4. poj 2049(二分+spfa判负环)

    poj 2049(二分+spfa判负环) 给你一堆字符串,若字符串x的后两个字符和y的前两个字符相连,那么x可向y连边.问字符串环的平均最小值是多少.1 ≤ n ≤ 100000,有多组数据. 首先根 ...

  5. 洛谷P3608 [USACO17JAN]Balanced Photo平衡的照片

    P3608 [USACO17JAN]Balanced Photo平衡的照片 题目描述 Farmer John is arranging his NN cows in a line to take a ...

  6. Openjudge2729 Blah数集(单调队列)

    2729:Blah数集 总时间限制:  3000ms 内存限制:  65536kB 描述 大数学家高斯小时候偶然间发现一种有趣的自然数集合Blah,对于以a为基的集合Ba定义如下:(1) a是集合Ba ...

  7. 洛谷P4768 [NOI2018]归程(克鲁斯卡尔重构树+最短路)

    传送门 前置技能,克鲁斯卡尔重构树 我们按道路的高度建一个最大生成树,然后建好克鲁斯卡尔重构树 那么我们需要知道一颗子树内到1点距离最近是多少(除此之外到子树内任何一个点都不需要代价) 可以一开始直接 ...

  8. 程序员除了会CRUD之外,还应该知道什么叫CQRS!

    今天主要跟大家分享一下什么是 CQRS,以及在项目中如何去使用.   CRUD系统 我们平常最熟悉的就是三层架构,通常都是通过数据访问层来修改或者查询数据,一般修改和查询使用的是相同的实体.然后通过业 ...

  9. 【UVA - 136】Ugly Numbers(set)

    Ugly Numbers Descriptions: Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequ ...

  10. 10.Python初窥门径(函数进阶)

    Python(函数进阶) 一.函数的传参(接上期) 形参角度(一共四种,后两种) 动态参数(万能参数)* # 定义一个函数时,*所有的位置参数聚合到一个元组中 def func(*args): # * ...