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+ ...
随机推荐
- mem_init()
原本由bootmem管理的内存在mem_init函数中交由伙伴系统管理. 1.free_unused_memmap_node 相邻的membank间可能存在空洞,但在bootmem阶段这些空洞页也分配 ...
- 推荐Android几个优质的完整项目学习
==>来自于微信公众号==鸿洋.大家可以关注一波大神之作. 后台经常有人问我能不能推荐几个完整项目用于学习.借着周末的机会,给大家推荐几个,项目我基本都在本地运行过,并且会在文章末尾提供每个项目 ...
- datagrid的修改和删除功能的实现
1.修改 双击,进入一行的编辑状态的功能的实现 2.删除 3.扩展easyui的datagrid,添加动态增加或删除Editor的方法 (1)背景要求: 对于某一列,比如密码,动态增加时候,是可以编辑 ...
- 我给女朋友讲编程CSS系列(1) –添加CSS样式的3种方式及样式表的优先权
如果说,原生态就是美,那么,我们就没有必要穿衣打扮. 网页是什么? 说白了,网页就是一堆[html标签]有序的搭配,让[CSS属性值]整整容,请[Javascript语言]处理一下事件. 一个人的整容 ...
- 4、CSS基础part-2
1.background-1 ①设置background-image ②设置background-attachment为fixed 可以声明图像相对于可视区是固定的(fixed),因此不会受到滚动的影 ...
- NGUI 学习总结
NGUI 学习一段时间了,这里总结一下,用于以后查看. 获取组件 在Awake函数里获取组件,然后就可在Start以及其他函数里使用 lbl = GetComponent<UILabel> ...
- Python+Selenium练习篇之16-自定义浏览器窗口大小
本文来学习下如何通过Selenium方法,设置符合不同测试场景浏览器窗口大小.例如,你有一台机器,最大支持1366*768,你完全可以利用这个机器测试不同分辨率下的场景. 相关测试脚本代码如下: # ...
- 踩坑 PHP Fatal Error Failed opening required File
使用 require 引用文件时,报错如下: require 'https://dev.ryan.com/test.php'; [Sat Mar 19 23:10:50 2011] [warn] mo ...
- MySQL != 失效
字段中包含 NULL 和 其他字符串值时, 字段既包含 NULL 也有字符串类型的值, 使用如下 SQL 无法获取值为 NULL 的部分 SELECT * FROM table_name WHERE ...
- Hadoop架构的初略总结(2)
Hadoop架构的初略总结(2) 回顾一下前文,我们总结了以下几个方面.我们为什么需要Hadoop:Hadoop2.0生态系统的构成:Hadoop1.0中HDFS和MapReduce的结构模型. 我们 ...