zoukankan      html  css  js  c++  java
  • 时间复杂度

    时间复杂度

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:3
    描写叙述

    ACM里面,计算复杂度是一项很重要的事情,常见的复杂度格式有三种:

    1. O(n)
      O(lg(n))
      O(sqrt(n))

    一个算法往往有多种解法,每种解法的复杂度有上述常见的的复杂度组合成。比如排序的两种算法:

    1. 高速排序: 时间复杂度为O(n*lg(n))

    2. 冒泡排序: 时间复杂度为O(n*n)

    如今给定你一个nm个算法复杂度,请确定这些复杂度是否会超时。

    若复杂度计算结果大于100000000。则为超时(TLE),否则输出计算的复杂度。输出的结果保留两位小数。

    ( lg(n)表示以2为底数。n为真数的值)

    输入
    第一行输入n (1≤n≤10000), m(1≤m≤100), 当中n为题目描写叙述的数,m为算法复杂度的个数。
    接下来m行,每行为一个串,每一个串都包括O()不论什么括号中面的数据保证仅由n,lg(),sqrt(),*组成而且合法。如sample input所看到的。
    输出
    对于每一个串。若计算出来的复杂度大于100000000,则输出TLE,否则输出该复杂度的计算次数
    例子输入
    10000 6
    O(n*n)
    O(n*n*n)
    O(sqrt(n))
    O(lg(n))
    O(n*lg(n))
    O(n*lg(n*lg(n)))
    例子输出
    100000000.00
    TLE
    100.00
    13.29
    132877.12
    170197.33
    提示
    关于lg(n)的C语言代码能够这样写

    log(n) / log(2)


    代码:

     
    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #define N 100000000
    char stack[1005];
    int k,n;
    double eval()
    {
    	if(k<0)
    		return 0;
    	if(stack[k]=='n')
    	{
    		k--;
    		return n;
    	}
    	if(stack[k]=='*')
    	{
    		k--;
    		return eval()*eval();
    	}
    	if(stack[k]=='g')
    	{
    		k--;
    		return log(eval())/log(2);
    	}
    	if(stack[k]=='t')
    	{
    		k--;
    		return sqrt(eval());
    	}
    }
    int main()
    {
    	int m,i,j,top,len,s;
    	double result;
    	char str[1005],ch[1005];
    	while(~scanf("%d%d",&n,&m))
    	{
    		for(i=1;i<=m;i++)
    		{
    			scanf("%s",str);
    			top=-1;
    			s=-1;
    			len=strlen(str);
    			for(j=len-1;j>=1;j--)
    			{
    				if(str[j]=='n')
    				{
    					top++;
    					stack[top]=str[j];
    				}
    				if(j<1)
    					break;
    				if(str[j]==')'||str[j]=='*')
    				{
    					s++;
    					ch[s]=str[j];
    				}
    				else if(str[j]=='(')
    				{
    					while(s>=0&&ch[s]!=')')
    					{
    						top++;
    						stack[top]=ch[s];
    						s--;
    					}
    					s--;
    				}
    				else if(str[j]=='t')
    				{
    					top++;
    					stack[top]=str[j];
    					j=j-3;
    				}
    				else if(str[j]=='g')
    				{
    					top++;
    					stack[top]=str[j];
    					j=j-1;
    				}
    			}
    			while(s>=0)
    			{
    				if(ch[s]!=')')
    				{
    					top++;
    					stack[top]=ch[s];
    					s--;
    				}
    			}
    			top++;
    			stack[top]='';
    			k=strlen(stack)-1;
    			result=eval();
    			if(result>N)
    				printf("TLE
    ");
    			else
    				printf("%.2f
    ",result);
    		}
    	}
    	return 0;
    }
            



  • 相关阅读:
    Thinkphp中自己组合的数据怎样使用框架的分页
    CI框架不能有Index控制器
    购物车,修改数量错误
    TypeError: 'stepUp' called on an object that does not implement interface HTMLInputElement.
    OAuth2.0
    通过控制面板查看时间日志
    js再学习笔记
    Thinkphp验证码异步验证第二次及以后验证,验证错误----待解决
    cookie&&session再理解笔记
    markdown语法学习笔记
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/7353432.html
Copyright © 2011-2022 走看看