UVa 120 Stacks of Flapjacks【构造法】】的更多相关文章

题目地址:UVa 120 水题. 从最大的開始移,每次都把大的先翻到最上面,再翻到以下. 代码例如以下: #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <stdlib.h> #include <math.h> #include <ctype.h> #include <queue> #incl…
UVA - 120  Stacks of Flapjacks Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Description Background Stacks and Queues are often considered the bread and butter of data structures and find use in architecture, parsing, oper…
 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…
题意:给出n张煎饼,从上到下输入,每张煎饼上面都有一个数字,厨师每次可以选择第k张煎饼,进行翻转操作,设计一种方法使得所有煎饼按照从小到大排序(最上面的煎饼最小) 首先是这个翻转的操作,如下图 如图所示:是把7以上的翻转,再把7以下的翻转 然后就是怎样找到去翻转哪张饼 以找最大的为例 即现在在煎饼的序列中找到最大的饼的序号, 判断序号是否与煎饼上的数字对应得上(即判断这个煎饼有没有放对位置) 如果没有放对位置 判断它是否已经在0位置(即顶部) 如果不在, 则将它翻转到0位置 如果在,则不用管 最…
每次从最底部开始处理,如果不是最大值,则把最大值翻到底部.这就是最优解.原理自己模拟一下就好... 注意半径不是从1开始.数据处理要仔细. #include <iostream> #include <cstring> #include <algorithm> #include <cstdio> using namespace std; int main (){ ],b[],c[]; ]; while (gets (str)!=NULL){ cout<&…
题意:一叠煎饼,每个煎饼都有一个数字,每次可以选择一个数k,把从锅底开始数第k张以及其上面的煎饼全部翻过来,最终使煎饼有序排列(锅顶最小,锅底最大). 分析:依次从锅底向上,优先排数字最大的煎饼.每次找未排好序列中数字最大的煎饼,并把他翻到锅顶,再将整个未排好序的序列翻转,这样该数字就到了当所有煎饼有序排列时其所在的位置. #pragma comment(linker, "/STACK:102400000, 102400000") #include<cstdio> #inc…
120 - Stacks of Flapjacks 题目看了半天......英语啊!!! 好久没做题...循环输入数字都搞了半天...罪过啊!!! 还是C方便一点...其实C++应该更方便的...C++得再看看!!! #include <iostream> #include <cstdio> using namespace std; /*翻转*/ void myReverse(int arr[],int s,int e) { while (s<e) { int temp=ar…
题意:给定一个序列,让你从一个升序列变成该序列,并且只有两种操作,操作1:交换前两个元素,操作2:把第一个元素移动到最后. 析:一开始的时候吧,不会,还是看的题解,首先是要逆序来做,这样可能好做一点,那么操作1不变,操作2变成把最后一个元素放到最前面. 就像是冒泡排序一样,如果第一个元素大于第二个,交换顺序,否则就把最后一个元素移动到最前面,但第三个样例就死循环了,我也算过,这样会一直重复某几个状态, 所以我们要维护第一个值,如果是最大的元素,那么就不让他们交换了. 代码如下: #include…
                                                 Stacks of Flapjacks  题目链接:Click Here~ 题目描写叙述:     给你n个数.要你得到的最后结果是从下到大排序.可是给出的序列不一定是有序你.要通过你的调整.问:要经过哪几个位置上的数的调整? 算法分析:     一開始,我的思路是直接模拟一边消除逆序数就能够了,由于我看数据非常小,仅仅有30.可是提交之后却TEL了. 后来上网查了一下.看到有一个人的思路还是非…
又是一道非常复杂的构造法-- #include<cstdio> #include<algorithm> #define REP(i, a, b) for(int i = (a); i < (b); i++) using namespace std; const int MAXN = 1123; int L, R, LHs[MAXN], RHs[MAXN], LH, RH, LHi, RHi; int solve() { int lt = 0, rt = 0, t; for(i…
这道题用构造法, 就是自己依据题目想出一种可以得到解的方法, 没有什么规律可言, 只能根据题目本身来思考. 这道题的构造法比较复杂, 不知道刘汝佳是怎么想出来的, 我想的话肯定想不到. 具体思路紫书上讲得非常清楚了, 就不讲了.代码有详细注释 #include<cstdio> #include<vector> #define REP(i, a, b) for(int i = (a); i < (b); i++) using namespace std; const int M…
[UVa120] Stacks of Flapjacks 算法入门经典第8章8-1 (P236) 题目大意:有一个序列,可以翻转[1,k],构造一种方案使得序列升序排列. 试题分析:从插入排序即可找到思路.每次我们优先地将没有到自己位置上的.最大的数挪到自己的位置上. 为什么可以这样做呢?难道不会改变已经排好序的么. 不会,因为我们从大往小处理,翻转的是前面的一段,而排好序的是后面一段,因此肯定不会打乱后面的. 对于每一个数,设其下标为pos,已经排好序的有x个,那么我们先将pos其变为1,即翻…
概述 NFA非有穷自动机,即当前状态识别某个转换条件后到达的后继状态不唯一,这种自动机不便机械实现,而DFA是确定有限状态的自动机,它的状态转换的条件是确定的,且状态数目往往少于NFA,所以DFA能够比较方便的机械实现且识别能力方面也和NFA相当.本次实验采用子集构造法来实现不带空弧的由NFA到DFA的转换. 子集构造法的算法如下: 设NFA为M=(K,Σ,f,S0,Z),则构造相应的DFA  M′=(Q,Σ,f′,I0,F)①取I0=S0:②对于状态集Q中任一尚未标记的状态qi={Si1,Si…
1.向量点积同二维,x1y1+x2y2+x3y3.向量叉积是行列式形式,(y1z2-z1y2,z1x2-x1z2,x1y2-y1x2). 2.增量构造法: 1)首先定义,一个平面由三个点唯一确定.一个平面是有方向的,它的法向量只有一个方向(即逆时针相邻两向量的叉积的方向). 2)初始时只有(p1,p2,p3)和(p3,p2,p1)两个平面(相当于两个方向相反的面组成了一个体积为0的凸包) 3)每次加入一个新点时,以这个点为光源中心投影到凸包上,不能被照到的面在新凸包中仍然存在,否则不存在. 4)…
Tautology Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7716   Accepted: 2935 Description WFF 'N PROOF is a logic game played with dice. Each die has six faces representing some subset of the possible symbols K, A, N, C, E, p, q, r, s,…
 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…
天坑未补... 水一波博客,再不写博客就咸成鱼干了,只写题不写题解,过一段时间就忘了自己学过什么了. 最近重点就是把开学以来写的题补出来,没学的就滚去学会啊(= =),填一下坑... 从这篇博客开始,填最近的坑 先贴这些题的题解,剩下的3道题过一段时间补出来再贴. 开始表演. A.数字方阵 链接:https://www.nowcoder.com/acm/contest/86/A 这个题是反魔方阵,正常的魔方阵是相同,这个是不相同,有一个神奇的东西,先来个传送门,biubiubiu 梁邱构造法(百…
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 l…
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题的第23篇文章. 今天来看一道很有意思的题,它的难度是Hard,并且有许多种解法. 首先我们来看题面,说是我们有若干个水坝,水坝的宽都是1,但是水坝的高度参差不齐.某一天我们向水坝围起来的部分灌水,一直到灌满为止,请问水坝中存储了多少单位的水?我们可以参考一下下图: 上图当中黑色的部分是水坝,蓝色的部分是存储的水.所有的水坝的宽度是1,长度是整数,不考虑损耗. 我们的输入是一个数组,表示若干个水坝的高度,要求的…
[原] E.J.Hoffman; J.C.Loessi; R.C.Moore The Johns Hopkins University Applied Physics Laboratory *[译]* EXP 2017-12-29 注意 由于原文使用了"m皇后"进行描述,所以本文从现在开始也使用"m皇后"进行描述. 我这里就不调整为大多数人习惯的"n皇后"了,避免某些数学公式参数混淆. *[写在前面]* 这是现在网上流传的一套关于M皇后问题的构造…
题意:有N张正在锅里的一叠煎饼,每张都有一个数字,代表其大小.厨师每次可以选择一个数k,把从锅底开始数第k张上面的煎饼全部翻过来,即原来在上面的煎饼现在到了下面.要求设计一种方法使得所有煎饼按照从小到大排序(最上面的煎饼最小). 解法:基本操作就是颠倒一个连续子序列.既然没有限制什么其他的条件,就一个个完成好了.把最大的移到最上面,再移到最下面:再是第二大.第三大等等...... P.S.而我实在是太搞笑了!echo输入我直接忽略了..自己打的比紫书上的标程长了将近一倍,还错了..因此,要注意数…
这题求解的过程和选择排序非常相似. 反转的过程中分为无序(在前面)和有序(在后面)两个部分,一开始视为全部为无序. 在无序部分中找到最大的元素,先把它翻到最前面,然后再反转到无序部分的最后面.这样该元素就成为有序的部分. 而且在算法执行的过程中不会影响到已经构造好的有序部分. #include <iostream> #include <string> #include <sstream> #include <algorithm> #include <c…
这个题没什么算法,就是想出怎么把答案构造出来就行. 思路:越大的越放在底端,那么每次就找出还没搞定的最大的,把它移到当前还没定好的那些位置的最底端,定好的就不用管了. 这道题要处理好输入,每次输入的一行中是带空格的,以换行符结束一组数据的输入,那么用getline()函数.再用stringstream(这个可以自动转格式),非常方便的就处理了输入的问题.另外注意max_element和min_element都是左闭右开的. #include<iostream> #include<cstd…
BackgroundStacks 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 proble…
#include<cstdio> #include<iostream> #include<sstream> #include<algorithm> #define REP(i, a, b) for(int i = (a); i < (b); i++) using namespace std; const int MAXN = 50; int a[MAXN], n; void filp(int pos) //学习这里翻转的写法 { REP(i, 0, p…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 从大到小安排. 显然想让第i大的数字归位 只要让他翻到最上面,然后再翻回来就ok了 即operate(pos[i]) -> operate(i) [代码] /* 1.Shoud it use long long ? 2.Have you ever test several sample(at least therr) yourself? 3.Can you promise that the solution is right?…
这道题的构造法真的复杂--要推一堆公式--这道题写了几天了--还是没写出来-- 一开始简单的觉得先左右来回, 然后上下来回, 然后把剩下的执行完了好了, 然后就WA. 然后换了个思路, 觉得是贪心, 觉得只要保证当前留下的最多就ok了, 然后又WA. 这里不能每一步贪心, 因为当前最优不能保证以后是最优的. 然后找数据发现, 其实当留下的个数一样多的时候还要有格外的优先级,而且分很多种情况. 然后就去看了很多博客. 发现原来开始还要先判断往南北还是东西, 然后东西完了之后再每次判断南北还是西,…
题意:给一个整数序列,输出每次反转的位置,输出0代表排序完成.给一个序列1 2 3 4 5,这5就是栈底,1是顶,底到顶的位置是从1~5,每次反转是指从左数第i个位置,将其及其左边所有的数字都反转,假如反转位置2,则1 2 3 4 5就变成 4 3 2 1 5. 问怎样经过最少次数的反转能得到升序12345. 思路:每次产生一个最大的数字到右边,经过n次就升序了.每次产生可能需要两次反转,也可能1次就搞定,可能0次.0次是因为该数已经在最终位置上:1次搞定是因为最大数已经在栈顶(最左边),一反转…
这道题方法非常的巧妙, 两层的n*n, 第一层第I行全是第I个国家, 第二层的第j列全是第j个国家.这样能符合题目的条件.比如说第1个国家, 在第一层的第一行全是A, 然后在第二层的第一行就有ABCDE--这样A就和所有的国家都连接了,其他国家也是一样的.只能说这种方法非常巧妙吧,答案讲出来很简单,但是不容易想到. #include<cstdio> #define REP(i, a, b) for(int i = (a); i < (b); i++) using namespace st…
题意:给出n个国家,给它们分配办公室,使得任意两个国家都有一对相邻的格子 看的紫书,最开始看的时候不理解 后来还是搜了题解--- 发现是这样的 比如说5个国家 应该输出 AAAA BBBB CCCC DDDD EEEE ABCDE ABCDE ABCDE ABCDE ABCDE 按照这样的办法来放置就好了 #include<iostream> #include<cstdio> #include<cstring> #include <cmath> #inclu…