UVA120(煎饼)

这个题唯一坑爹的地方就是UVA给的udebug数据是错的,害得我头疼了半天。。。

思路就是依次找最大的数把它转到最低端,每次执行的时候判断一下是否已经符合题意,符合则跳出循环。

  1 #include <iostream>
  2 #include <algorithm>
  3 #include <cstdio>
  4 #include <cstdlib>
  5 #include <vector>
  6
  7 using namespace std;
  8 int a[35];
  9
 10 int judge(int k)
 11 {
 12     int i;
 13     for(i=0; i<k-1; i++)
 14     {
 15         if(a[i]>a[i+1])
 16             return 0;
 17     }
 18     return 1;
 19 }
 20 int Max(int k,int num)
 21 {
 22     int i,t;
 23     int maxn = -1;
 24     for(i=0; i<k; i++)
 25         if(a[i]>maxn)
 26         {
 27             maxn = a[i];
 28             t=i;
 29         }
 30     if(t==k-1)
 31         return 0;
 32     else
 33         return num-t;
 34 }
 35 int main()
 36 {
 37     int i,j,k=0;
 38     char c;
 39     while(scanf("%d",&a[k++])!=EOF)
 40     {
 41         while(getchar()!=‘\n‘)
 42             scanf("%d",&a[k++]);
 43         int num = k;
 44         for(i=0; i<k; i++)
 45         {
 46             if(i==0)
 47                 printf("%d",a[i]);
 48             else
 49                 printf(" %d",a[i]);
 50         }
 51         printf("\n");
 52         int flag = 0;
 53         int t=1;
 54         while(judge(num)==0)
 55         {
 56
 57             if(k==1)break;
 58             if(!Max(k,num))
 59             {
 60                 k--;
 61                 t++;
 62                 continue;
 63             }
 64             flag++;
 65             if(Max(k,num)==num)
 66             {
 67                 if(flag==1)
 68                     printf("%d",t);
 69                 else
 70                     printf(" %d",t);
 71                 t++;
 72                 for(i=0; i<(num-t+1)/2+1; i++)
 73                 {
 74                     int m=a[i];
 75                     a[i] = a[num-t+1-i];
 76                     a[num-t+1-i] = m;
 77                 }
 78                 k--;
 79                 continue;
 80             }
 81             if(flag==1)
 82                 printf("%d",Max(k,num));
 83             else
 84                 printf(" %d",Max(k,num));
 85             int q = Max(k,num);
 86             for(i=0; i<(num-q+1)/2; i++)
 87             {
 88
 89                 int m=a[i];
 90                 a[i] = a[num-q-i];
 91                 a[num-q-i] = m;
 92             }
 93         }
 94         if(flag)
 95             cout << " 0" << endl;
 96         else
 97             cout << "0" << endl;
 98         k=0;
 99     }
100     return 0;
101 }
时间: 2024-10-19 19:22:07

UVA120(煎饼)的相关文章

第八章 高效算法设计

分治法求最大连续和 注意范围是[x,y) #include<bits/stdc++.h> using namespace std; int maxsum(int *A,int x,int y){ if(y-x==1) return A[x]; int m=x+(y-x)/2; int maxs = max(maxsum(A,x,m),maxsum(A,m,y)); int v,L,R; v=0; L=A[m-1]; for(int i=m-1;i>=x;i--) L=max(L,v+=A

《煎饼侠》推广曲《五环之歌》MV首曝光神曲 岳云鹏 献唱

<煎饼侠>终极海报-竖版 新浪娱乐讯 由大鹏首度执导主演的暑期档唯一爆笑喜剧<煎饼侠>,凭其高达300多个笑点的爆笑指数正备受关注.日前,岳云鹏联手MC Hotdog(热狗)跨界演绎推广曲<五环之歌>,一经曝光便迅速刷爆了众多网友的微博.朋友圈,并在上线短短两小时突破200万次试听量,一举成为当下最火热的新一代神曲.近日,片方重磅曝光<五环之歌>MV,岳云鹏和MC Hotdog的倾情献唱,将洗脑神功全面升级. 本支MV中,岳云鹏用曲艺唱腔,闭目深情的唱出了五

AOJ-0525 Osenbei-翻煎饼(穷竭搜索,BFS,BITSET)

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0525 题意:药药!切克闹! 煎饼果子来一套!有一个烤饼器可以烤r行c列的煎饼,煎饼可以正面朝上(用1表示)也可以背面朝上(用0表示).一次可将同一行或同一列的煎饼全部翻转.现在需要把尽可能多的煎饼翻成正面朝上,问最多能使多少煎饼正面朝上? 输入:多组输入,每组第一行为二整数r, c (1 ≤ r ≤ 10, 1 ≤ c ≤ 10 000),剩下r行c列表示煎饼初始状态.r=c=0

翻煎饼(swust oj 0254)

Description:http://acm.swust.edu.cn/problem/0254/ 解题思路:先找出最大的煎饼,先翻转到最上面,最后翻转到最下层 AC代码: #include<stdio.h> int time=0; int digit[1000]; void turn(int a,int b)//翻煎饼 { int i=a,j=b; while(i<j){ int t=digit[i]; digit[i]=digit[j]; digit[j]=t; i++; j--;

Hark的数据结构与算法练习之煎饼排序

算法说明 假设煎锅里边有N个煎饼摞在了一起,它们大小不一并且顺序不一致,我们需要通过拿铲子将它们不停的翻个,进行排序,最终得到一个底下是大的煎饼,上边是小的煎饼的序列.这个排序的过程就是煎饼排序. 这个算法有两种解,一种是普通解,一种是最优解. 普通论证: 例如你的初始煎饼顺序是[2,4,3,1] 然后2与4交换位置,然后4与1交换位置,得出[1,3,2,4]. 然后3与1交换位置,接着3与2交换位置,得出[2,1,3,4]. 最后2与1交换位置,得出结果[1,2,3,4] 通过普通解的过程,我

UVa120 - Stacks of Flapjacks (STL)

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. 栈和队列常常被

煎饼堆

前言 该题目确实算作一个很基础的题目,但真正去写时却很容易出错,主要在于两点 煎饼堆翻动时的细节处理 输入与输出处理 因此做一记录 题目  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 discret

信息时代的“煎饼人”

手机依赖与阅读快感 不知道从何时开始,每天起床的第一件事不是刷牙洗脸,而是打开微信朋友圈,看一眼活跃的QQ群,还有查看邮箱.如果恰好遇上一篇标题颇为吸引的文章,还会花点时间看完.万一是篇知乎长文,再附上几个拓展链接,恐怕就是一个早上. 互联网产业与智能手机的快速发展,让"在线"变得相当容易.切随时随地,掏出手机,就连接上了微信,知乎,还有各大社交平台.这种阅读方式与读杂志非常接近,从这些文章里面可以知道热点的时事,朋友的近况,活动的宣传推广.开始还对此不以为意,直到某天想试着不用手机,

UVa120 Stacks of Flapjacks (构造法)

链接:http://vjudge.net/problem/18284 分析:摊煎饼问题.以从大到小的顺序依次把每个数排到正确的位置,比如当处理第i大的煎饼时,是不会影响到第1,2,3,...,i-1大的煎饼的(它们已经正确的翻到了煎饼堆底部的i-1个位置上),翻煎饼的方法是先翻到最上面,然后翻到正确的位置,翻好了以后煎饼堆底部i个位置上的煎饼都已经正确放好就不用管了,接下来就是找第i+1大的煎饼放到下数上第i+1个位置上,不过对于当前最大煎饼的位置要分类讨论,如果已经在其正确位置上就什么也不用做