zoukankan      html  css  js  c++  java
  • Uva120 Stacks of Flapjacks 翻煎饼

    水水题。给出煎饼数列, 一次只能让第一个到第i个数列全部反转,要求把数列排序为升序。

    算法点破后不值几钱。。。

    只要想办法把最大的煎饼放到最后一个,然后就变成前面那些煎饼的数列的子题目了。递归或循环即可。

    把大饼放后面只要先让前面翻转使大饼排在后面,再整体翻转让大饼排到后面。

    这题不是求最优解,我也不知道这样是不是最优解。



    AC代码:

    #include <cstdio>
    #include <cstring>
    int const maxn = 31;
    int arr[maxn], n;
    
    void rev(int cut) {
    	printf("%d ", n - cut);
    	for (int i = 0; i <= cut / 2; i++) {
    		int tmp = arr[i];
    		arr[i] = arr[cut - i];
    		arr[cut - i] = tmp;
    	}//for
    }//rev
    
    int scan(void) {
    	char ch = 0;
    	memset(arr, 0, sizeof(arr));
    	if (scanf("%d", &arr[0]) == EOF) return 0;
    	int i = 1;
    	while ((ch = getchar())  && ch != '
    ') {
    		scanf("%d", &arr[i++]);
    	}//while 
    	return i;
    }//get a array
    
    int main() {
    	freopen("in", "r", stdin);
    	while (n = scan()) {
    		printf("%d", arr[0]);
    		for (int i = 1; i < n; i++)
    			printf(" %d", arr[i]);
    		printf("
    ");
    		int cnt = n;
    		while (cnt) {
    			int max = 0, rec;
    			for (int i = 0; i < cnt; i++) {
    				if (arr[i] > max) {
    					max = arr[i];
    					rec = i;
    				}//if
    			}//for   choose the max
    			if (rec != cnt - 1) {
    				if (rec != 0)
    					rev(rec);
    				rev(cnt - 1);
    			}
    			cnt --;
    		}//while    recycle
    		printf("0
    ");
    	}//while
    	return 0;
    }


    复杂度应该是n^3,用时0.019s,看到人家0.000s的实在佩服。。。

  • 相关阅读:
    Struts2+Spring+Ibatis集成合并
    spring多个定时任务quartz配置
    Quartz作业调度框架
    百度搜索URL参数含义
    代理IP抓取
    解决HttpWebRequest和HtmlAgilityPack采集网页中文乱码问题
    移动端上传头像-相册、拍摄-旋转
    订单倒计时
    css flex布局 实例
    currentTarget与target
  • 原文地址:https://www.cnblogs.com/java20130723/p/3212267.html
Copyright © 2011-2022 走看看