• 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的实在佩服。。。

  • 相关阅读:
    贾鹏芳 二胡演奏家
    php 关于下载中文文件实现
    Android 线程。。
    Hadoop命令行接口运行自己编写的类
    ubuntu下jdk环境变量的设置
    navicat导入sql语句文件失败原因-----datetime
    sql server获取当前时间到秒级和毫秒级的语句
    sql关于group by的问题
    java的equal和==的区别
    win8.1 占用80端口问题
  • 原文地址:https://www.cnblogs.com/java20130723/p/3212267.html
Copyright © 2020-2023  润新知