当前位置: 首页 > article >正文

UVA 177 Paper Folding

题目分析本题描述了一个有趣的折纸问题将一张长纸条进行NNN次对折每次将右半部分折到左边然后每个折痕从180∘180^\circ180∘打开到90∘90^\circ90∘从纸的边缘端视会观察到一条被称为 “龙曲线” Dragon Curve\texttt{Dragon Curve}Dragon Curve 的图形。要求根据输入的NNN绘制出对应的曲线其中水平线段用下划线_表示竖直线段用竖线|表示。输入包含多行每行一个整数NNN1≤N≤131 \leq N \leq 131≤N≤13以000表示输入结束。对于每个NNN输出对应的龙曲线图形且图形需要尽可能靠左、靠上放置每个图形后跟一行包含单个^的行作为结束标记。解题思路1. 折痕序列的生成规律龙曲线的形成与折痕的方向序列密切相关。经过分析可以发现折痕序列的生成具有自相似性分形特征。定义四种基本方向R\texttt{R}R向右L\texttt{L}L向左U\texttt{U}U向上D\texttt{D}D向下经过一次折叠的折痕序列为RU\texttt{RU}RU。对于NNN次折叠其折痕序列可以通过N−1N-1N−1次折叠的序列生成pattern(N) pattern(N-1) 0 rotate(pattern(N-1))其中rotate\texttt{rotate}rotate表示将序列中每个字符按规则映射R→U\texttt{R} \rightarrow \texttt{U}R→UU→L\texttt{U} \rightarrow \texttt{L}U→LL→D\texttt{L} \rightarrow \texttt{D}L→DD→R\texttt{D} \rightarrow \texttt{R}D→R然后反转顺序。实际代码中我们使用递归方式生成序列先得到N−1N-1N−1的序列然后将其反转并映射后追加到自身末尾。2. 坐标绘制得到折痕序列后从起点开始模拟绘制过程遇到R\texttt{R}R或L\texttt{L}L时绘制水平线段_并相应改变yyy坐标遇到U\texttt{U}U或D\texttt{D}D时绘制竖直线段|并相应改变xxx坐标由于折痕打开后线段之间是连续的需要注意绘制位置和坐标更新的顺序绘制过程中记录所有访问点的坐标范围最后只输出有图形的区域并且尽可能靠左、靠上。3. 实现细节使用二维字符数组matrix存储图形大小设置为1024×10241024 \times 10241024×1024足够容纳N13N13N13的图形起点坐标设为(512,512)(512, 512)(512,512)以避免负坐标输出时逐行扫描去掉每行末尾多余的空格代码实现// Paper Folding// UVa ID: 177// Verdict: Accepted// Submission Date: 2016-03-11// UVa Run Time: 0.000s//// 版权所有C2016邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;// 方向映射表用于生成折叠序列的反转部分mapchar,charmapped;// 存储绘制图形的二维数组charmatrix[1024][1024];// 递归生成 N 次折叠后的折痕方向序列stringunfolding(intn){if(n1){// 先获取 N-1 次折叠的序列string patternunfolding(n-1);intlengthpattern.length();// 将原序列反转并映射后追加到末尾for(intilength-1;i0;i--)patternmapped[pattern[i]];returnpattern;}else// 一次折叠的基本序列为 RUreturnRU;}// 根据折痕序列绘制龙曲线voiddisplay(intn){// 获取完整的折痕序列末尾添加 0 作为哨兵string patternunfolding(n);pattern0;// 初始化图形数组为空格memset(matrix, ,sizeof(matrix));intx512,y512;// 起始坐标取中间位置避免负坐标intminx512,maxx512,miny512,maxy512;// 遍历折痕序列绘制图形for(inti0;ipattern.length()-1;i){if(pattern[i]L){// 向左画水平线matrix[x][y]_;y-1;}elseif(pattern[i]R){// 向右画水平线matrix[x][y]_;y1;}elseif(pattern[i]U){// 向上画竖直线matrix[x][y]|;x-1;// 根据下一个方向确定转角后的位置if(pattern[i1]L)y-1;if(pattern[i1]R)y1;}elseif(pattern[i]D){// 向下画竖直线x1;matrix[x][y]|;// 根据下一个方向确定转角后的位置if(pattern[i1]L)y-1;if(pattern[i1]R)y1;}// 更新坐标边界minxmin(x,minx);maxxmax(x,maxx);minymin(y,miny);maxymax(y,maxy);}// 输出图形尽可能靠左、靠上for(intiminx;imaxx;i){intlastymaxy;// 去掉行尾多余的空格while(matrix[i][lasty] )lasty--;if(lasty0){for(intjminy;jlasty;j)coutmatrix[i][j];cout\n;}}// 每个图形以 ^ 结束cout^\n;}intmain(){cin.tie(0);cout.sync_with_stdio(false);// 初始化方向映射表mapped.insert(make_pair(R,U));mapped.insert(make_pair(U,L));mapped.insert(make_pair(L,D));mapped.insert(make_pair(D,R));intn;while(cinn,n)display(n);return0;}总结本题的核心在于发现龙曲线折痕序列的自相似生成规律。通过递归方式生成序列后模拟绘制过程即可得到答案。对于N13N13N13图形宽度会超过808080个字符但题目允许这种情况只需要正确输出即可。

相关文章:

UVA 177 Paper Folding

题目分析 本题描述了一个有趣的折纸问题:将一张长纸条进行 NNN 次对折(每次将右半部分折到左边),然后每个折痕从 180∘180^\circ180∘ 打开到 90∘90^\circ90∘,从纸的边缘端视,会观察到一条被称为 “龙曲线…...

QueryExcel:终极Excel批量搜索工具,100个文件秒级查找

QueryExcel:终极Excel批量搜索工具,100个文件秒级查找 【免费下载链接】QueryExcel 多Excel文件内容查询工具。 项目地址: https://gitcode.com/gh_mirrors/qu/QueryExcel 还在为在几十个Excel文件中查找数据而加班到深夜吗?还在为核对…...

算法测试终极指南:如何确保Algorithms39项目中复杂算法的正确性与性能

算法测试终极指南:如何确保Algorithms39项目中复杂算法的正确性与性能 【免费下载链接】Algorithms A collection of algorithms and data structures 项目地址: https://gitcode.com/gh_mirrors/algorithms39/Algorithms 在软件开发领域,算法的正…...

如何快速掌握Sanic自定义异常处理:构建健壮API的完整指南

如何快速掌握Sanic自定义异常处理:构建健壮API的完整指南 【免费下载链接】sanic Accelerate your web app development | Build fast. Run fast. 项目地址: https://gitcode.com/gh_mirrors/sa/sanic Sanic是一个基于Python的异步Web框架,以其高…...

Animata:开箱即用的交互动画素材库,提升前端开发效率

1. 项目概述:Animata,一个开箱即用的交互动画素材库如果你和我一样,经常在开发网页或应用时,为了一个按钮的点击反馈、一个卡片的悬停效果,或者一个页面的过渡动画,而不得不去翻看各种设计网站、查阅CSS动画…...

终极TensorFlow资源指南:从入门到精通的精选项目架构全解析

终极TensorFlow资源指南:从入门到精通的精选项目架构全解析 【免费下载链接】awesome-tensorflow TensorFlow - A curated list of dedicated resources http://tensorflow.org 项目地址: https://gitcode.com/gh_mirrors/awe/awesome-tensorflow TensorFlow…...

Qwen3.5-4B-Claude-Opus部署教程:基于llama.cpp的GPU加速Web服务搭建详解

Qwen3.5-4B-Claude-Opus部署教程:基于llama.cpp的GPU加速Web服务搭建详解 1. 模型介绍 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是一个基于Qwen3.5-4B的推理蒸馏模型,特别强化了结构化分析、分步骤回答、代码与逻辑类问题的处理能力。该版…...

绝区零全自动游戏助手:3步配置终极指南

绝区零全自动游戏助手:3步配置终极指南 【免费下载链接】ZenlessZoneZero-OneDragon 绝区零 一条龙 | 全自动 | 自动闪避 | 自动每日 | 自动空洞 | 支持手柄 项目地址: https://gitcode.com/gh_mirrors/ze/ZenlessZoneZero-OneDragon 你是否厌倦了在《绝区零…...

高性能WSL离线管理架构设计:LxRunOffline的Windows子系统全生命周期管理最佳实践

高性能WSL离线管理架构设计:LxRunOffline的Windows子系统全生命周期管理最佳实践 【免费下载链接】LxRunOffline A full-featured utility for managing Windows Subsystem for Linux (WSL) 项目地址: https://gitcode.com/gh_mirrors/lx/LxRunOffline 在Win…...

Godot引擎集成MCP协议:AI智能体如何直接操作游戏开发项目

1. 项目概述:当游戏引擎遇见AI智能体如果你是一位游戏开发者,或者对AI应用开发感兴趣,最近可能已经注意到了“MCP”(Model Context Protocol)这个词。它正在成为连接AI模型与外部工具、数据源的新兴标准协议。而youich…...

OpenCoder-llm性能优化秘籍:vLLM加速与多GPU并行技术

OpenCoder-llm性能优化秘籍:vLLM加速与多GPU并行技术 【免费下载链接】OpenCoder-llm The Open Cookbook for Top-Tier Code Large Language Model 项目地址: https://gitcode.com/gh_mirrors/op/OpenCoder-llm OpenCoder-llm作为顶级代码大语言模型的开源解…...

开源词汇管理工具OpenWord:开发者如何构建个人术语库与知识图谱

1. 项目概述:一个面向开发者的开源词汇管理工具最近在整理个人技术笔记和项目文档时,我常常被一个看似简单却无比繁琐的问题困扰:如何高效地管理那些散落在代码注释、API文档、技术博客甚至聊天记录里的专业术语、缩写和特定名词?…...

StructBERT零样本分类-中文-base实时流式:Kafka接入+微批处理+低延迟分类流水线

StructBERT零样本分类-中文-base实时流式:Kafka接入微批处理低延迟分类流水线 1. 项目概述 StructBERT零样本分类-中文-base是一个强大的中文文本分类工具,它最大的特点是无需训练就能直接使用。想象一下,你拿到一堆中文文本,想…...

开源社区建设指南:从脚手架到生态的协作方法论与实践

1. 项目概述:一个开源知识社区的诞生与价值 最近在GitHub上看到一个挺有意思的项目,叫 nowledge-co/community 。光看这个名字,你可能会觉得有点抽象,但点进去之后,你会发现它其实是一个围绕“知识协作”构建的开源社…...

【bmc10】route,iptables,macvlan,mii/mdio,ncsi,bond,vlan,dns,ipv6

文章目录 1.局域网 1.1 mac 2.互联网 2.1 tcp 3.route 4.iptables 4.1 filter表 4.2 nat表 5.macvlan 5.1 bridge模式 5.2 private模式 6.mii 6.1 rgmii时序调整 7.mdio 8.uboot&kernel配动态ip 9.ncsi 9.1 驱动分析 10.bond 11.vlan 12.dns 13.ipv6 1.局域网 1.早期通过双…...

Prism:AI辅助开发的SwiftUI菜单栏工具,统一管理Claude API配置

1. 项目概述与核心价值如果你和我一样,日常开发、写作或者处理信息时,Claude 已经成了离不开的助手,那你肯定也遇到过这个痛点:手头有好几个不同的 AI 服务提供商,有的是官方的 Claude API,有的是国内大厂提…...

技术人的商业思维培养:看懂财报背后的研发效率

在软件测试行业深耕多年,你是否曾有过这样的困惑:明明团队测试覆盖率持续提升、bug拦截率屡创新高,可公司管理层却依然对研发成本管控忧心忡忡?当财务部门拿出密密麻麻的财报数据时,技术出身的我们往往一头雾水&#x…...

质量意识的组织渗透:如何让全员为质量负责?

在软件行业飞速发展的今天,软件产品的质量直接关系到企业的生存与发展。然而,长期以来,“质量是测试部门的事”这一错误观念在不少企业中根深蒂固,导致开发过程中质量问题频发,测试团队疲于奔命却难以从根本上提升产品…...

开发者与测试者的认知偏差:为什么他们总说“这不可能重现”

一、认知偏差的根源:不同的工作视角与目标在软件研发的闭环中,开发者与测试者如同站在同一座山的两面,虽望向同一个产品,却因职责分工形成了截然不同的认知坐标系。开发者的核心目标是“构建”,他们沉浸于代码的逻辑编…...

AgentGym-RL:构建统一强化学习基准平台,训练通用AI智能体

1. 项目概述:当智能体走进“健身房”最近在强化学习社区里,一个名为“AgentGym-RL”的项目引起了我的注意。这个由WooooDyy开源的仓库,名字起得很有意思——“AgentGym”,直译过来就是“智能体健身房”。这让我立刻联想到&#xf…...

设计稿自动化解析:从Figma到代码的设计令牌提取实战

1. 项目概述:从设计稿到代码的自动化提取 最近在跟一个前端团队合作,他们被一个老生常谈但又极其消耗人力的环节卡住了脖子:UI设计稿的还原。设计师在Figma或Sketch里交付了精美的界面,但前端工程师需要手动测量间距、提取颜色值、…...

BAAI/bge-m3输出不稳定?随机性控制与种子设置实战技巧

BAAI/bge-m3输出不稳定?随机性控制与种子设置实战技巧 1. 问题背景:为什么你的相似度结果总在变? 如果你用过BAAI/bge-m3模型来做文本相似度分析,可能会遇到这样的情况:同样的两段文字,第一次分析得到85%…...

Linux下将Cursor AppImage封装为系统级deb包的自动化方案

1. 项目概述:为什么我们需要一个“类VSCode”的Cursor安装器?如果你和我一样,是一个长期在Linux桌面环境(特别是Debian/Ubuntu及其衍生发行版)下工作的开发者,那你一定对Visual Studio Code(VSC…...

dedao-dl终极指南:如何简单快速地备份你的得到课程资源

dedao-dl终极指南:如何简单快速地备份你的得到课程资源 【免费下载链接】dedao-dl 得到 APP 课程下载工具,可在终端查看文章内容,可生成 PDF,音频文件,markdown 文稿,可下载电子书。可结合 openclaw skill …...

别急着画板子!手把手教你从零设计STM32F103C8T6最小系统(附立创开源工程)

从零构建STM32F103C8T6最小系统的实战指南 第一次拿到STM32芯片时,很多人会迫不及待地想画板子。但真正做过硬件设计的人都知道,原理图上的每一个元件都不是随意摆放的。本文将带你从芯片选型开始,一步步完成一个工业级可用的最小系统设计&am…...

OpenClaw-Capacities:模块化AI能力集成框架的设计与实战

1. 项目概述:一个开源的多模态AI能力集成框架最近在GitHub上闲逛,发现了一个挺有意思的项目,叫OpenClaw-Capacities。乍一看这个名字,可能会有点摸不着头脑——“OpenClaw”是“开放之爪”,“Capacities”是“能力”&a…...

AIT:基于Git与符号链接的AI开发配置管理工具详解

1. 项目概述:AIT,一个AI开发者的配置管理中枢如果你和我一样,日常开发重度依赖 Claude Code 和 Cursor 这类 AI 编码助手,那你一定遇到过这个痛点:每次开新项目,都得把那些用顺手的规则(Rules&a…...

Godot 4游戏开发模板:Takin项目架构与核心模块解析

1. 项目概述与核心价值如果你正在用 Godot 4 做游戏,尤其是刚开始一个新项目,大概率会遇到一个经典困境:每次新建项目,都得从零开始搭建一套基础框架。你得手动创建Global单例来管理游戏状态,得四处找好用的插件来管理…...

本地Git基础知识

本地Git基础知识 文章目录本地Git基础知识初识GitGit核心概念初始配置.bashrc获取本地仓库基础操作指令基础命令**添加文件至忽略列表**分支查看差异变基暂时清空暂存区初识Git 为什么需要版本控制器? 简单来说,当我们修改代码后发现程序崩溃&#xff…...

AI编程项目品牌系统生成:一分钟打造语义化设计令牌与CLAUDE.md指南

1. 项目概述:一分钟搞定AI编程项目的品牌系统 如果你和我一样,日常重度依赖 Cursor、Claude 或 Windsurf 这类 AI 编程工具来快速构建项目,那你一定也遇到过这个痛点:项目功能做出来了,但界面看起来千篇一律&#xff…...