uva 177:Paper Folding(模拟 Grade D)
题意:一张纸,每次从右往左对折。折好以后打开,让每个折痕都自然的呈90度。输出形状。
思路:模拟折……每次折想象成把一张纸分成了正面在下的一张和反面在上的一张。维护左边和方向,然后输出。细节有点多。
代码:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std; #define N (1<<13)+10 struct Paper{
int l, r;
bool isFace;
Paper(){}
Paper(int _l, int _r, bool is) : l(_l), r(_r), isFace(is){}
}paper[N]; int data[N]; int pp; void flod(Paper &now) {
int mid = (now.l+now.r)/;
data[mid] = now.isFace?:-;
//printf("%d %c %d\n", now.l, "^v"[data[mid]==1], now.r);
if( now.isFace ) {
paper[pp++] = Paper(mid,now.r,!now.isFace);
now.r = mid;
} else {
paper[pp++] = Paper(mid,now.r,now.isFace);
now.r = mid;
now.isFace = !now.isFace;
} } struct Point{
int x,y;
int way;
Point(int x=, int y=, int way=-):x(x),y(y),way(way){}
}point[N]; enum{
R,U,L,D
}; char mat[][];
void showGraph(int end) {
point[] = Point(,,R);
//printf("%d,%d,%c\n",0,0,"RULD"[R]);
int lmost = ;
int umost = ;
int rmost = ;
int dmost = ;
for (int i = ; i < end; i++) {
int way = (point[i-].way+data[i]+)%;
int x = point[i-].x;
int y = point[i-].y; // 细节:找出现在的位置
switch(point[i-].way) {
case R: y += ; break;
case L: y -= ; break;
case U: x -= ; break;
case D: break;
}
switch (way) {
case R: y += ; break;
case L: y -= ; break;
case U: break;
case D: x += ; break;
} point[i] = Point(x, y, way); //printf("%d,%d,%c\n",x,y,"RULD"[way]); umost = min(umost, x);
dmost = max(dmost, x); lmost = min(lmost, y);
rmost = max(rmost, y);
}
//printf(" %d \n%d %d\n %d\n", umost, lmost, rmost, dmost);
memset(mat, ' ', sizeof(mat));
for (int i = ; i < end; i++) {
mat[point[i].x-umost][point[i].y-lmost] = (point[i].way == L || point[i].way == R)?'_':'|';
}
dmost = dmost - umost;
rmost = rmost - lmost;
for (int i = ; i <= dmost; i++) {
mat[i][rmost+] = ;
int p = rmost;
while (mat[i][p] == ' ') mat[i][p--] = ;
printf("%s\n", mat[i]);
}
puts("^");
//printf(" %d \n%d %d\n %d\n", umost, lmost, rmost, dmost);
} int main() {
int n;
while (scanf("%d", &n) != EOF) {
if (n == ) break;
pp = ;
paper[pp++] = Paper(,<<n,true); memset(data, -, sizeof(data));
for (int i = ; i < n; i++) {
int nowpp = pp;
for (int j = ; j < nowpp; j++) {
flod(paper[j]);
}
} //for (int i = 1; i < (1<<n); i++) {
// printf("%c ", "^v"[data[i]==1]);
//}puts(""); showGraph(<<n);
}
return ;
}
uva 177:Paper Folding(模拟 Grade D)的更多相关文章
- 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 177】Paper Folding(算法效率--模拟)
P.S.模拟真の难打,我花了近乎三小时!o(≧口≦)o 模拟题真的要思路清晰!分块调试. 题意:著名的折纸问题:给你一张很大的纸,对折以后再对折,再对折--每次对折都是从右往左折,因此在折了很多次以后 ...
- Paper Folding UVA - 177 模拟+思路+找规律
题目:题目链接 思路:1到4是很容易写出来的,我们先考虑这四种情况的绘制顺序 1:ru 2:rulu 3:rululdlu 4:rululdluldrdldlu 不难发现,相较于前一行,每一次增加一倍 ...
- UVA 1594:Ducci Sequence (模拟 Grade E)
题意: 对于一个n元组(a0,a1,...),一次变换后变成(|a0-a1|,|a1-a2|,...) 问1000次变换以内是否存在循环. 思路: 模拟,map判重 代码: #include < ...
- UVA 1593: Alignment of Code(模拟 Grade D)
题意: 格式化代码.每个单词对齐,至少隔开一个空格. 思路: 模拟.求出每个单词最大长度,然后按行输出. 代码: #include <cstdio> #include <cstdli ...
- UVA 1589:Xiangqi (模拟 Grade D)
题目: 象棋,黑棋只有将,红棋有帅车马炮.问是否死将. 思路: 对方将四个方向走一步,看看会不会被吃. 代码: 很难看……WA了很多发,还越界等等. #include <cstdio> # ...
- UVa 11210 - Chinese Mahjong 模拟, 枚举 难度: 0
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
- UVA 1156 - Pixel Shuffle(模拟+置换)
UVA 1156 - Pixel Shuffle 题目链接 题意:依据题目中的变换方式,给定一串变换方式,问须要运行几次才干回复原图像 思路:这题恶心的一比,先模拟求出一次变换后的相应的矩阵,然后对该 ...
- UVA 12050 - Palindrome Numbers 模拟
题目大意:给出i,输出第i个镜像数,不能有前导0. 题解:从外层开始模拟 #include <stdio.h> int p(int x) { int sum, i; ;i<=x;i+ ...
随机推荐
- 怎样查看web软件例如apache的连接数
查看连接总数和当前的连接数 netstat -ant | grep $ip:80 | wc -l netstat -ant | grep $ip:80 | grep EST | wc -l 查看IP访 ...
- DRF工程搭建
环境安装与配置 DRF需要以下依赖: Python (2.7, 3.2, 3.3, 3.4, 3.5, 3.6) Django (1.10, 1.11, 2.0) DRF是以Django扩展应用的方式 ...
- win10桌面显示我的电脑
1.桌面单击右键菜单栏,选中单击个性化 2.选择主题->桌面图标设置 3.勾选需要显示或不显示的图标
- PAT Basic 1084
1084 外观数列 外观数列是指具有以下特点的整数序列: d, d1, d111, d113, d11231, d112213111, ... 它从不等于 1 的数字 d 开始,序列的第 n+1 项是 ...
- 初识java,编写hello world语句
JDK: Java Develpment Kit - java开发工具包 JRE: Java Runtime Environment - java运行环境 JVM: Java Virtual Mach ...
- RDLC Reporting in Visual Studio 2017
原文:RDLC Reporting in Visual Studio 2017 Visual Studio 2017 中可以使用 RDLC Reporting 插件来设计报表,SAP Crystal ...
- POJ1741 Tree (点分治)
Tree Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 25772 Accepted: 8566 Description ...
- Mysql 死锁
http://www.cnblogs.com/benshan/archive/2013/05/09/3068886.html 声明:以下讨论只是针对InnoDB存储引擎. 何为死锁? 死锁是对资源 ...
- iOS----------设计模式的六大设计原则------>开放-关闭原则(OCP,Open-Close Principle)
定义 一个软件实体(如类.模块.函数)应当对扩展开放,对修改关闭. 定义解读 在项目开发的时候,都不能指望需求是确定不变化的,大部分情况下,需求是变化的.那么如何应对需求变化的情况?这就是开放-关闭原 ...
- kubeadm安装k8s测试环境
目标是搭建一个可测试的k8s环境,使用的工具 kubeadm, 最终一个master节点(非高可用),2个node节点. 环境以及版本 Centos7.3 kubeadm 1.11.1 kubelet ...