【uva 177】Paper Folding(算法效率--模拟)
P.S.模拟真の难打,我花了近乎三小时!o(≧口≦)o 模拟题真的要思路清晰!分块调试。
题意:著名的折纸问题:给你一张很大的纸,对折以后再对折,再对折……每次对折都是从右往左折,因此在折了很多次以后,原先的大纸会变成一个窄窄的纸条。现在把这个纸条沿着折纸的痕迹打开,每次都只打开“一半”,即把每个痕迹做成一个直角,那么从纸的一端沿着和纸面平行的方向看过去,会看到一条美妙的曲线。输入对折次数,请绘出打开后生成的曲线。(P.S.看到画图我就笑了......<( - ︿-)>)
解法:模拟。1.先找到变化规律给每一“笔”编号(这个需要前一笔的方向和现在这一笔的方向共同确定位置,由于用 _ 和 | 输出会有偏差的......);2.再定一个原点,把负数的横、纵坐标的点全部“移”到非负整数处,记下坐标,这样才能输出好;3.依行、列输出。
1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<algorithm>
5 #include<iostream>
6 using namespace std;
7
8 const int N=15,NN=13;
9 struct node {int x[1<<N],y[1<<N],s[1<<N];} a[N];
10 struct hp {int x,y,p;} b[N][1<<N];
11 int dir[4][2]={{0,1},{-1,0},{0,-1},{0,0}};//前一个到现在 向右、上、左、下
12 int dirr[4][2]={{0,1},{0,0},{0,-1},{1,0}};//对现在的再调整
13 char str[2]={'_','|'};
14
15 int mmin(int x,int y) {return x<y?x:y;}
16 int mmax(int x,int y) {return x>y?x:y;}
17 bool cmp(hp x,hp y)
18 {
19 if (x.x!=y.x) return x.x<y.x;
20 return x.y<y.y;
21 }
22 void init()
23 {
24 a[0].s[1]=b[0][1].p=0;
25 a[0].x[1]=a[0].y[1]=b[0][1].x=b[0][1].y=0;//原点
26 for (int i=1;i<=NN;i++)
27 {
28 int tt=1<<(i-1),t=1<<i;
29 int mnx=0,mny=0;//最左上端的点离起点的行、列距离
30 a[i].x[0]=a[i].y[0]=0;//源点
31 for (int j=1;j<=t;j++)
32 {
33 if (j<=tt)
34 {
35 a[i].s[j]=a[i-1].s[j];//前一半部分一样
36 a[i].x[j]=a[i-1].x[j];
37 a[i].y[j]=a[i-1].y[j];
38 }
39 else
40 {
41 int p,q;
42 p=(a[i].s[tt-(j-tt)+1]+1)%4,q=a[i].s[j-1];
43 a[i].s[j]=p;
44 a[i].x[j]=a[i].x[j-1]+dirr[p][0]+dir[q][0];//j-1
45 a[i].y[j]=a[i].y[j-1]+dirr[p][1]+dir[q][1];//需要前一个和现在这个配合才行
46 }
47 mnx=mmin(mnx,a[i].x[j]),mny=mmin(mny,a[i].y[j]);//一般为负数
48 }
49 for (int j=1;j<=t;j++)//调整坐标
50 {
51 a[i].x[j]-=mnx,a[i].y[j]-=mny;
52 b[i][j].x=a[i].x[j],b[i][j].y=a[i].y[j];
53 b[i][j].p=a[i].s[j]&1;
54 }
55 sort(b[i]+1,b[i]+1+t,cmp);//为了输出
56 b[i][0].x=b[i][0].y=-1;
57 }
58 }
59 void print(int i)
60 {
61 int x=0,y=0,t=1<<i;
62 for (int j=1;j<=t;j++)
63 {
64 if (b[i][j].x!=b[i][j-1].x)
65 {
66 while (x<b[i][j].x) x++,printf("\n");
67 y=0;
68 }
69 while (y<b[i][j].y) y++,printf(" ");
70 y++,printf("%c",str[b[i][j].p]);
71 }
72 printf("\n^\n");
73 }
74 int main()
75 {
76 init();
77 while (1)
78 {
79 int n;
80 scanf("%d",&n);
81 if (!n) break;
82 print(n);
83 }
84 return 0;
85 }
【uva 177】Paper Folding(算法效率--模拟)的更多相关文章
- uva 177:Paper Folding(模拟 Grade D)
题目链接 题意:一张纸,每次从右往左对折.折好以后打开,让每个折痕都自然的呈90度.输出形状. 思路:模拟折……每次折想象成把一张纸分成了正面在下的一张和反面在上的一张.维护左边和方向,然后输出.细节 ...
- Uva - 177 - Paper Folding
If a large sheet of paper is folded in half, then in half again, etc, with all the folds parallel, t ...
- 【uva 1617】Laptop(算法效率--贪心,2种理解)
题意:有N条长度为1的线段,要求使每条线段分别在相应区间,且"空隙"数目最小.输出"空隙"数.(1≤N≤100000) 解法:(P.S.我这题竟做了2个多小时, ...
- 【uva 1615】Highway(算法效率--贪心 区间选点问题)
题意:给定平面上N个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的每个店,都有一个选出的点离它的欧几里德距离不超过D. 解法:先把问题转换成模型,把对平面的点满足条件的点在x轴的直线上可得到 ...
- 关于贪心算法的经典问题(算法效率 or 动态规划)
如题,贪心算法隶属于提高算法效率的方法,也常与动态规划的思路相挂钩或一同出现.下面介绍几个经典贪心问题.(参考自刘汝佳著<算法竞赛入门经典>).P.S.下文皆是我一个字一个字敲出来的,绝对 ...
- 训练指南 UVA - 11383(KM算法的应用 lx+ly >=w(x,y))
layout: post title: 训练指南 UVA - 11383(KM算法的应用 lx+ly >=w(x,y)) author: "luowentaoaa" cata ...
- CUDA并行计算 | CUDA算法效率提升关键点概述
文章目录 前言 存取效率 计算效率 性能优化要点 展现足够的并行性 优化内存访问 优化指令执行 前言 CUDA算法的效率总的来说,由存取效率和计算效率两类决定,一个好的CUDA算法必定会让两类效率 ...
- 【bzoj 3433】{Usaco2014 Jan} Recording the Moolympics(算法效率--贪心)
题意:给出n个区间[a,b),有2个记录器,每个记录器中存放的区间不能重叠.求2个记录器中最多可放多少个区间. 解法:贪心.只有1个记录器的做法详见--关于贪心算法的经典问题(算法效率 or 动态规划 ...
- Paper Folding UVA - 177 模拟+思路+找规律
题目:题目链接 思路:1到4是很容易写出来的,我们先考虑这四种情况的绘制顺序 1:ru 2:rulu 3:rululdlu 4:rululdluldrdldlu 不难发现,相较于前一行,每一次增加一倍 ...
随机推荐
- LeetCode498 对角线遍历
给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示. 示例: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], ...
- Tomcat配置上遇到的一些问题
Tomcat启动:在bin目录下双击startup.bat文件就行. 访问:在浏览器输入http://localhost:8080 回车访问的是自己 的界面: http://othersip:8080 ...
- 9. 细节见真章,Formatter注册中心的设计很讨巧
目录 本文提纲 版本约定 你好,我是A哥(YourBatman). Spring设计了org.springframework.format.Formatter格式化器接口抽象,对格式化器进行了大一统, ...
- HAProxy-1.8.20 根据后缀名转发到后端服务器
global maxconn 100000 chroot /data/soft/haproxy stats socket /var/lib/haproxy/haproxy.sock mode 600 ...
- Received empty response from Zabbix Agent at [agent]. Assuming that agent dropped connection because of access permission
Received empty response from Zabbix Agent at [agent]. Assuming that agent dropped connection because ...
- Error: Could not open input file: /usr/java/jdk1.7.0_07/jre/lib/jsse.pack
[root@localhost ~]# rpm -ivh jdk-7u7-linux-i586.rpm Preparing... ################################### ...
- SAP里会话结束方法(杀死进程)
在SAP的ERP里,有很多方法可以结束一个会话,然而在不同情况下,需要使用的方法也不同.下面从先后顺序来简单说明:1.SM04:最常用的方法,在SM04点击工具栏的会话->结束会话,来关闭一个会 ...
- centos7下 开启/关闭/查看firewall运行状态命令
1.开启防火墙:systemctl start firewalld.service [root@localhost bin]# systemctl start firewalld.service [r ...
- 机器学习7-模型保存&无监督学习
模型保存和加载 sklearn模型的保存和加载API from sklearn.externals import joblib 保存:joblib.dump(rf, 'test.pkl') 加载:es ...
- 二十七:XSS跨站之代码及httponly绕过
httponly:如果给某个 cookie 设置了 httpOnly 属性,则无法通过 JS 脚本 读取到该 cookie 的信息,但还Application 中手动修改 cookie,所以只是在一定 ...