Uva 120 Stacks of Flapjacks 解题报告

Claude Code Agents 进阶:多代理协作与任务委托 Agent 是一个独立运行的 Claude 实例,它有自己的上下文和任务焦点。│ 主 Claude ││ (协调者) ││ │ │▼ ▼ ▼│ 代码审查 │ │ 测试生成 │ │ 文档编写 ││ │ ││▼汇总结果,完成任务并行处理:多个 Agent 同时工作,提高效率任务隔离:每个 Agent 有独立的上下文专业分工:不同类型的 Agent 擅长不同任务灵活控制:可以指定运行模式、超时等参数。 阅读详情

Stacks of Flapjacks(煎饼)

Background

Stacks and Queues are often considered the bread and butter of data structures and find use in architecture, parsing, operating systems, and discrete event simulation. Stacks are also important in the theory of formal languages.

栈和队列经常被认为是数据结构中的面包和黄油,并且广泛应用在体系结构、分析、操作系统和离散化等领域。栈同时也在形式语言理论中发挥着重要的作用。

This problem involves both butter and sustenance in the form of pancakes rather than bread in addition to a finicky server who flips pancakes according to a unique, but complete set of rules.

这个问题是一个挑剔的厨师用一种独特的方式翻动煎饼,使得煎饼(而不是面包)中的黄油和营养不被破坏。(对于我这种英语缺

陷的人来说,翻译这种令人无语的句子真是一种折磨啊...)

The Problem

Given a stack of pancakes, you are to write a program that indicates how the stack can be sorted so that the largest pancake is on the bottom and the smallest pancake is on the top. The size of a pancake is given by the pancake's diameter. All pancakes in a stack have different diameters.

给出一叠煎饼,你需要把它们从小到大进行排序,使得最大的在底部,最小的在顶部。给出煎饼的直径作为它的尺寸。每一个煎饼的的直径都是不同的。

Sorting a stack is done by a sequence of pancake ``flips''. A flip consists of inserting a spatula between two pancakes in a stack and flipping (reversing) the pancakes on the spatula (reversing the sub-stack). A flip is specified by giving the position of the pancake on the bottom of the sub-stack to be flipped (relative to the whole stack). The pancake on the bottom of the whole stack has position 1 and the pancake on the top of a stack of n pancakes has position n.

煎饼的排序是通过一种“翻转”实现的。一次翻转(...这一部分好难翻译啊...)是把铲子放在两个煎饼之间,然后把上面的煎饼倒转过来。每个翻转是由开始位置决定的,即铲子上面的最下面的那张煎饼(是铲子放进的两个煎饼中上面的那个)的编号。最下面的那张编号是1,最上面的那张编号是n。

A stack is specified by giving the diameter of each pancake in the stack in the order in which the pancakes appear.

一个叠煎饼由一组表示其中各煎饼直径的数构成,它们排列的顺序就是给出的这些数的顺序。

For example, consider the three stacks of pancakes below (in which pancake 8 is the top-most pancake of the left stack):

比如下面的三叠煎饼(煎饼8是左边一叠的最上面的一个):

         8           7           2
         4           6           5
         6           4           8
         7           8           4
         5           5           6
         2           2           7
The stack on the left can be transformed to the stack in the middle via flip(3). The middle stack can be transformed into the right stack via the command flip(1).

左边一叠可以通过从第3个煎饼开始翻转变成中间一叠的顺序。中间一叠可以通过从第1个煎饼开始翻转变成右边一叠的顺序。

The Input

The input consists of a sequence of stacks of pancakes. Each stack will consist of between 1 and 30 pancakes and each pancake will have an integer diameter between 1 and 100. The input is terminated by end-of-file. Each stack is given as a single line of input with the top pancake on a stack appearing first on a line, the bottom pancake appearing last, and all pancakes separated by a space.

输入包括许多叠煎饼。每叠都由1到30个煎饼组成,并且每个煎饼的直径都在 1到100之间。输入由EOF结束。每叠煎饼独占一行,最上面的在行首,最下面的在行尾,各煎饼中间由空格隔开。

The Output

For each stack of pancakes, the output should echo the original stack on one line, followed by some sequence of flips that results in the stack of pancakes being sorted so that the largest diameter pancake is on the bottom and the smallest on top. For each stack the sequence of flips should be terminated by a 0 (indicating no more flips necessary). Once a stack is sorted, no more flips should be made.

对应于每叠煎饼数据,必须在第一行输出原来这叠煎饼的内容,接下来输出一组翻转动作的序列,使得这一叠煎饼自底向上由大至小的排列。输出的每一组翻转动作序列都要由0来结束(表示不再进行翻转)。一旦一叠煎饼已经排好序,就不能再进行任何翻转。

Sample Input

1 2 3 4 5
5 4 3 2 1
5 1 2 3 4

Sample Output

1 2 3 4 5
0
5 4 3 2 1
1 0
5 1 2 3 4
1 2 0
终于翻译完题了,接下来可以分析一下题意,本题是要让我们通过不断地“翻转”,即将一段序列颠倒,来实现从小到大的排序。
第一眼看上去好像有些没有思路,不过仔细想想不难发现,由于翻转是在从一个点向上到顶端这段区间内进行的,所以可以从下往上逐渐把每个煎饼归位(因为上面的对下面的没有影响),这样的话就变成了先把煎饼的大小从大到小排序,然后从大到小把每个煎饼先翻到最上面(这样接下来就只需要一次把它翻到应该处在的位置上了)。
Code:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[101],b[101],c[100001];
int z[301]; 
bool cmp(int x,int y)
{
	return x>y;
}
int find(int x,int n)
{
	for (int i=1; i<=n; i++)
		if (a[i]==x)
		{
			return i;
			break;
		}
}
int main()
{
	int n,i=0,j=0,k=1,l=0,x,p=0;
	char ch;
	memset(a,0,sizeof(a));
	memset(b,0,sizeof(b));
	memset(c,0,sizeof(c));
	memset(z,-1,sizeof(z));
	while (scanf("%c",&ch)==1)
	{
		if (ch!='\n') z[++i]=ch-'0';
		else if (ch=='\n')
		{
			n=i;
			int v=0;
			for (i=1; i<=n; i++)
			{
				if (z[i]>0 && z[i+1]<0)
				{
					a[++v]=z[i];
					z[i]=-1;
				}
				else if (z[i]>0 && z[i+1]>=0 && z[i+2]<0)
				{
					a[++v]=z[i]*10+z[i+1];
					z[i]=-1;
					z[i+1]=-1;
				}
				else if (z[i]>0 && z[i+1]>=0 && z[i+2]>=0)
				{
					a[++v]=z[i]*100+z[i+1]*10+z[i+2];
					z[i]=-1;
					z[i+1]=-1;
					z[i+2]=-1;
				}
				else if (z[i]>0 && z[i+1]==0)
				{
					a[++v]=z[i];
					z[i]=-1;
				}
			}
			while (a[n]==0) n--;
			for (i=1; i<=n; i++)
			{
				printf("%d ",a[i]);
				b[i]=a[i];
			}
			printf("\n");
			sort(b+1,b+n+1,cmp);
			for (i=n; i>=1; i--)
			{
				if (a[i]==b[n-i+1]) continue;
				k=find(b[n-i+1],n);
				if (k!=1)
				{
					l++;
					c[l]=n-k+1;
					for (j=1; j<=k/2; j++)
					{
						a[j]^=a[k-j+1];
						a[k-j+1]^=a[j];
						a[j]^=a[k-j+1];
					}
				} 
				if (a[1] != b[n])
				{
					l++;
					c[l]=n-i+1;
					for (j=1; j<=i/2; j++)
					{
						a[j]^=a[i-j+1];
						a[i-j+1]^=a[j];
						a[j]^=a[i-j+1];
					}
				}
			}
			for (i=1; i<=l+1; i++) printf("%d ",c[i]);
			printf("\n");
			i=0;
			l=0;
			memset(a,0,sizeof(a));
			memset(c,0,sizeof(c));
			memset(z,-1,sizeof(z));
		}
	}
	return 0;
}
中间做了许多很笨的转换方法...比如字符转数字用流的话会简单许多...还有就是把交换两个变量写成了异或的形式...貌似有些多余,欢迎轻喷...
IDEA的使用指南 IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧. 立即下载

相关推荐

别再折腾CUDA了!Win11上VSCode一键配置PyTorch GPU环境(附Anaconda虚拟环境避坑指南)

本文提供Win11系统下使用VSCode和Anaconda一键配置PyTorch GPU环境的详细指南,解决CUDA版本冲突等常见问题。通过conda的原子化依赖解决方案,安装时间从2小时缩短至15分钟,适合深度学习初学者快速搭建开发环境。

weixin_33101399的博客 248

洛谷-UVA120 煎饼 Stacks of Flapjacks

输入格式 输出格式 题意 给你一迭薄煎饼,请你写一个程式来指出要如何安排才能使这些薄煎饼由上到下依薄煎饼的半径由小到大排好。所有的薄煎饼半径均不相同。 要把薄煎饼排好序需要对这些薄煎饼做翻面(flip)的动作。方法是以一抹刀插入一迭薄煎饼中,然后做翻面的动作(也就是说在抹刀上面的薄煎饼经翻面后,会依相反的次序排列)。若一迭共有n个薄煎饼,我们定义最底下的薄煎饼的位置为1,最上面的薄煎饼位置为...

zqhf123的博客 552

数学:箭头符号→(to)都表示什么意义?

数学符号“→”在不同领域有不同含义:在逻辑中表示“蕴含”(p→q);在函数中表示映射关系(f:A→B);在极限中表示变量趋近(x→a);在推导过程中表示推理方向(A→B)。此外,它也可能用于向量表示或数列趋势。其具体含义需结合上下文判断,核心应用场景包括逻辑运算、函数定义、极限分析和数学推导等。

shunzi2016的博客 5572

题解|Stacks of Flapjacks

Stacks of Flapjacks UVA-120 [问题描述] 堆栈和队列通常被认为是数据结构的面包和黄油,可用于体系结构、解析,操作系统和离散事件模拟。堆栈在形式语言理论中也很重要。 现在的问题涉及黄油和煎饼(而不是面包),同时还有一个根据唯一但完整的规则来翻煎饼的服务器。 给你一栈的煎饼,请你编写一个程序用于指示这个栈如何被排序以使得最大的煎饼在最下面而最小的煎饼在最上面。 煎饼的直径将...

My Blog 527

星空组网 vs 蒲公英 vs Tailscale:2024年国内免费异地组网工具横评(含实测数据)

本文对2024年国内主流免费异地组网工具星空组网、蒲公英和Tailscale进行了深度横向评测。基于实测数据,重点分析了三者在P2P成功率、中继延迟、传输速度及稳定性方面的表现,为中小企业、远程办公及个人开发者提供了清晰的选择指南。星空组网在国内网络环境下展现出优秀的平衡性。

weixin_29217235的博客 1440

LeGO-LOAM运行kitti数据集

文章目录1. kitti-lego-loam2. 改动3. 实验结果4. evo轨迹测评 1. kitti-lego-loam 链接:kitti-lego-loam kitti-lego-loam提供了将kitti序列转化成rosbag的代码,在kittibag中. 需要注意下数据文件的存放顺序,以00序列为例: datafolder          |____results          &

Zlp19970106的博客 8704

8-1 Stacks of Flapjacks UVA120

题意: 有一叠煎饼在锅里 n n<=30张 每张都有一个数字 代表它的大小 厨师每次可以选择一个数k 把从锅底开始数第k张上面的煎饼全部反过来 即原来的在上面的煎饼现在到了下面 如 Sample Input 1 2 3 4 5 5 4 3 2 1 5 1 2 3 4 Sample Output 1 2 3 4 5 0 5 4 3 2 1 1 0 5 1...

weixin_30642267的博客 169

使用 Simulink 进行电力电子系统的大信号模型仿真

电力电子系统(Power Electronics System)包括各种功率转换器(如 DC-DC 转换器、逆变器等)。这些设备中的关键组件(如 MOSFET、IGBT、电容器、电感器等)不仅影响系统的性能,还直接关系到系统的稳定性、效率和可靠性。因此,在设计阶段进行详细的建模和仿真至关重要。大信号模型仿真的目的是通过模拟系统在非线性条件下的真实行为,评估其瞬态响应、稳态性能以及对不同负载和输入电压变化的响应。通过本教程,我们介绍了如何使用 Simulink 进行电力电子系统的大信号模型仿真。背景介绍。

xiaoheshang_123的博客 303

Stacks of Flapjacks(翻煎饼) 蓝桥杯 每周一练

[问题描述](老师已经为宝宝们翻译好啦) Stacks and Queues are often considered the bread andbutter of data structures and find use in architecture, parsing,operating systems, and discrete event simulation.Stacks are als...

付某人的博客 289

机器学习项目实战案例数据集

本专栏整理了《机器学习项目实战案例》,内包含了各种不同的机器学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。

优快云 精品推荐 3637

微观交通流仿真软件:SUMO (Simulation of Urban MObility)_(8).仿真场景创建与编辑

总结文件()包含了仿真过程中的总体统计信息,如车辆生成数、平均速度等。加载总结文件使用Python的提取关键信息通过以上步骤,可以使用SUMO及其相关工具和库创建和编辑交通仿真场景。无论是手动创建、使用工具转换现有数据,还是通过Python脚本自动生成,SUMO都提供了丰富的功能来满足不同需求。此外,Traci库允许在仿真过程中动态调整交通场景,从而实现更精细的控制和优化。最后,通过对输出文件的分析,可以评估仿真结果并进行进一步的改进。

kkchenjj的博客 1270

Stacks of Flapjacks(双端队列0v0)

Stacks and Queues are often considered the bread and butter of data structures and find use in architecture, parsing, operating systems, and discrete event simulation. Stacks are also important in the...

qq_42711300的博客 218

基于 ESP32-CAM 与 TinyML 的食堂餐盘自动识别与营养分析终端

【代码】基于 ESP32-CAM 与 TinyML 的食堂餐盘自动识别与营养分析终端。

weixin_42300449的博客 166

UVa 120 - Stacks of Flapjacks解题报告

模拟排序题, 思路:从右到左扫描数组,把未排序的区间的最大数的位置j找到,然后将0到j的区间反转,再将这个最大数应在的位置i到0的区间反转一次,就完成了一次排序,重复进行,直到扫描到数组的最左边。需要注意边界条件的处理。 //120 - Stacks of Flapjacks #include #include using namespace std; int pan[40];

Yonah潇的专栏 710

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

解题报告 之 UVA120 Stacks of Flapjacks

解题报告 之 UVA120 Stacks of Flapjacks Description Background Stacks and Queues are often considered the bread and butter of data structures and find use in architecture, parsing, operatin

JUST CODE 694

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

UVa 120 - Stacks of Flapjacks 解题报告(暴力)

120 - Stacks of Flapjacks Time limit: 3.000 seconds

SF-_- 的 ACM 博客 703

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

UVa 120 Stacks of Flapjacks

题目要求模拟煎饼叠排序过程,通过翻转操作将煎饼按直径从小到大排列(顶部最小,底部最大)。每次翻转操作将指定位置及以上的煎饼顺序反转。解题采用贪心策略:从最大煎饼开始,依次将其翻转到目标位置。算法时间复杂度为O(n²),适用于最多30个煎饼的情况。输入为一行煎饼直径,输出原始叠和翻转步骤(以0结尾)。代码通过排序和标记位置实现翻转操作,确保每次最多两次翻转即可将一个煎饼归位。

寂静山林 965

UVa 120 Stacks of Flapjacks 【排序】

题目链接:UVa 120 Stacks of FlapjacksDescription:Stacks and Queues are often considered the bread and butter of data structures and find use in architecture, parsing, operating systems, and discrete event s

咸鱼の小窝 452

Stacks of Flapjacks(翻煎饼) UVA - 120 (贪心 排序)

堆栈和队列通常被认为是数据结构的面包和黄油,可用于体系结构、解析,操作系统和离散事件模拟。堆栈在形式语言理论中也很重要。 现在的问题涉及黄油和煎饼(而不是面包),同时还有一个根据唯一但完整的规则来翻煎饼的服务器。 给你一栈的煎饼,请你编写一个程序用于指示这个栈如何被排序以使得最大的煎饼在最下面而最小的煎饼在最上面。 煎饼的直径将被给出。 栈中的所有煎饼的直径都不一样。 对栈排序是通过一系列"翻...

Suprit's blog 945

UVa OJ 120 - Stacks of Flapjacks

UVa OJ 120 - Stacks of FlapjacksProblem  有一叠煎饼正在锅里。煎饼共有n(n≤30)张,每张都有一个数字,代表它的大小,如 图8-11所示。厨师每次可以选择一个数k,把从锅底开始数第k张上面的煎饼全部翻过来,即 原来在上面的煎饼现在到了下面。   设计一种方法使得所有煎饼按照从小到大排序(最上面的煎饼最小)。输入时,各个煎 饼按照从上到下的顺序给出。 In

Yuuki_Dach's Blog 525

排序综合-UVA120 煎饼 Stacks of Flapjacks题解(采用STL)

一、算法分析 首先看到这个题,就要想到对子序列进行排序的做法。那么解题思路就比较清晰了,即先找到子序列,再用题上特有的操作(翻面法),将子序列排序。具体做法如下例所示: 2 4 1 5 3 6 5 1 4 2 3 6 3 2 4 1 5 6 4 2 3 1 5 6 1 3 2 4 5 6 3 1 2 4 5 6 2 1 3 4 5 6 1 2 3 4 5 6 分析:①将数组进行排序,本例排序结果为...

numb_ac的博客 274

UVA 120 - Stacks of Flapjacks

输入数字是以回车结束每一行,注意只输入一个数字情况。感觉这道题答案应该不唯一。下面代码是从后往前搜索,如果在相应位置就过去;如果不在就交换到第0位置,然后在做一次交换到相应位置。 #include #include #include int cmp(const void *_a, const void *_b) { int* a = (int *)_a; in

zcube的技术博客 2476

UVa120 例题 8-1 煎饼 (Stacks of Flapjacks)

原题链接: UVa-120 参考博客: http://www.cnblogs.com/devymex/archive/2010/08/15/1799844.html 题目大意:   有N张正在锅里的一叠煎饼,每张都有一个数字,代表其直径大小。厨师每次可以选择一个数k,把从锅底开始数第k张上面的煎饼全部翻过来,即原来在上面的煎饼现在到了下面。要求设计一种方法使得所有煎饼按照从小到大排

Miracle42的博客 1486

Uva 120 - Stacks of Flapjacks(构造法)

UVA - 120Stacks of Flapjacks Time Limit:3000MS Memory Limit:Unknown 64bit IO Format:%lld & %llu Description Background Stacks and Queues are often c...

Dara2015的博客 221

UVA - 120 Stacks of Flapjacks

自己对该题的一些细节的分析,作为以后复习资料

Stay 315

uva 120 Stacks of Flapjacks(检索)

Stacks of Flapjacks  Background Stacks and Queues are often considered the bread and butter of data structures and find use in architecture, parsing, operating systems, and discr

不慌不忙、不急不躁 1539
下一篇: UVa 10160 Servicing stations解题报告
morestep
博客等级 码龄12年 20粉丝 88原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值