UVa 120 - Stacks of Flapjacks
2014-07-01 10:07
357 查看
题目:烙煎饼,给你一个数字串,每次可以反转前面任意个,输出将串转化成递增的步骤。
分析:数据结构,栈。先将最大的放到最底下,然后第二大的放到导数第二层,以此类推。
设计一个子函数完成反转即可。处理区间 [1,n] 时如下(m为最大值位置):
1.如果当前寻找最大值在底部,则不需要处理;
2.如果当前寻找最大值在顶部,则反转前n个元素;
3.如果当前寻找最大值在中间,先反转前m个(将最大值置顶),然后反转前n个元素(同2)。
说明:模拟+dp(⊙_⊙)?
分析:数据结构,栈。先将最大的放到最底下,然后第二大的放到导数第二层,以此类推。
设计一个子函数完成反转即可。处理区间 [1,n] 时如下(m为最大值位置):
1.如果当前寻找最大值在底部,则不需要处理;
2.如果当前寻找最大值在顶部,则反转前n个元素;
3.如果当前寻找最大值在中间,先反转前m个(将最大值置顶),然后反转前n个元素(同2)。
说明:模拟+dp(⊙_⊙)?
#include <iostream> #include <cstdlib> #include <cstdio> using namespace std; int F[32]; void rev( int l, int r ) { int temp; while ( l < r ) { temp = F[l]; F[l] = F[r]; F[r] = temp; l ++; r --; } } int over( int n, int m ) { int flag = n; for ( int i = 1 ; i < n ; ++ i ) if ( F[flag] < F[i] ) flag = i; if ( flag != n ) { if ( flag != 1 ) { rev( 1, flag ); printf("%d ",m+1-flag); } rev( 1, n ); printf("%d ",m+1-n); } return flag; } int main() { int count; while ( ~scanf("%d",&F[1] ) ) { count = 1; while ( (getchar()) != '\n' ) scanf("%d",&F[++ count]); printf("%d",F[1]); for ( int i = 2 ; i <= count ; ++ i ) printf(" %d",F[i]); printf("\n"); for ( int i = count ; i > 0 ; -- i ) over(i, count); printf("0\n"); } return 0; }
相关文章推荐
- UVa120 Stacks of Flapjacks
- UVA - 120 - Stacks of Flapjacks
- UVA 120 Stacks of Flapjacks
- Uva120 Stacks of Flapjacks 翻煎饼
- uva 120 stacks of flapjacks ——yhx
- UVA 120 Stacks of Flapjacks 煎饼
- Uva120——Stacks of Flapjacks
- UVA 120 - Stacks of Flapjacks
- Uva120 Stacks of Flapjacks 翻煎饼
- UVa:120 - Stacks of Flapjacks
- uva 120——Stacks of Flapjacks
- UVa 120 Stacks of Flapjacks
- [高效算法 deque运用]UVa120 - Stacks of Flapjacks
- [UVA120]Stacks of Flapjacks[STL][构造]
- uva 120 Stacks of Flapjacks 简单构造
- UVA - 120 Stacks of Flapjacks
- UVA 120 - Stacks of Flapjacks
- UVa 120 - Stacks of Flapjacks
- UVA 120 - Stacks of Flapjacks
- uva 120 stacks of flapjacks ——yhx