zoukankan      html  css  js  c++  java
  • HDU 1027 Ignatius and the Princess II 选择序列题解

    直接选择序列的方法解本题,可是最坏时间效率是O(n*n),故此不能达到0MS。

    使用删除优化,那么就能够达到0MS了。

    删除优化就是当须要删除数组中的元素为第一个元素的时候,那么就直接移动数组的头指针就能够了,那么时间效率就是O(1)了,而普通的删除那么时间效率是O(n),故此大大优化了程序。

    怎样直接选择第k个序列,能够參考本博客的Leetcode题解。Leetcode题有个一模一样的题目。只是没有使用删除优化。


    看见本题的讨论中基本上都是使用STL解,还有沾沾自喜的家伙,只是使用STL解决本题尽管是能够,可是那是由于本题的数据非常弱;

    由于使用STL的时间效率是O(n*m),当中n可能是1000, 而m可能是10000,故此会达到1千万的数据处理,随便添加个大数据用例就会超时。

    故此使用STL来解决本题事实上是非常次,非常0基础的解法了。


    #include <stdio.h>
    #include <vector>
    #include <string.h>
    #include <algorithm>
    #include <iostream>
    #include <string>
    #include <limits.h>
    #include <stack>
    #include <queue>
    #include <set>
    #include <map>
    using namespace std;
    
    const int MAX_N = 1001;
    int arr[MAX_N], N, M, tbl[MAX_N];
    
    void genSeqNum()
    {
    	int mth = M-1;
    	memset(tbl, 0, sizeof(int) * N);
    	tbl[N-1] = 0;
    	for (int i = N-2, d = 2; i >= 0 && mth > 0; i--, d++)
    	{
    		tbl[i] = mth % d;
    		mth /= d;
    	}
    }
    
    void eraseNth(int A[], int i)
    {
    	--N;
    	for (; i < N; i++)
    	{
    		A[i] = A[i+1];
    	}
    }
    
    void printNums()
    {
    	genSeqNum();
    	
    	int *A = arr;
    	printf("%d", A[tbl[0]]);
    	if (!tbl[0]) A++, N--;
    	else eraseNth(A, tbl[0]);	
    
    	int t = 1;//定位tbl下标
    	while (N > 0)//优化之后的算法
    	{
    		for (; N && !tbl[t]; t++)//主要优化地方
    		{
    			printf(" %d", *A);//输出为零的,不用使用删除函数
    			A++, N--;//又一次定位数列
    		}
    		if (!N) break;//已经输出完成
    
    		printf(" %d", A[tbl[t]]);//不为零的选择,使用删除函数
    		eraseNth(A, tbl[t]);
    		t++;
    	}
    	putchar('
    ');
    }
    
    int main()
    {
    	while (scanf("%d %d", &N, &M) != EOF)
    	{
    		for (int i = 0; i < N; i++)
    		{
    			arr[i] = i+1;
    		}
    		printNums();
    	}
    	return 0;
    }



  • 相关阅读:
    机器学习实战-学习笔记-第一章
    Spark高级数据分析中文版-读者交流
    AAS代码第2章
    AWS-CDH5.5安装-软件下载
    AWS-CDH5.5安装 CM配置节点
    AWS-CDH5.5安装-安装
    Spark-1.5.1 on CDH-5.4.7
    tpch-kudu
    kudu playground
    CDH5.4.5运行多字符分割记录
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4049951.html
Copyright © 2011-2022 走看看