时间复杂度

题目描述

查看题目信息

众所周知,时间复杂度是一种有效地描述程序运行时间的增长速率的东西。

在本题中它被定义为,若一个算法在数据大小为 时程序进行 次计算,并且有函数 ,其中 只有一项并且没有常数系数,使得存在 ,使得对于任意 ,则我们称这个算法的时间复杂度是 。

根据定义,不难证明,对于任意一个多项式 ,若它的最高次项次数为 ,则它的复杂度为 。

现在告诉你一个算法的计算次数与数据规模的关系函数 ​ ,定义如上,请求出它的复杂度。

输入格式

输入包含一行,代表 ,保证给定的是一个指数小于 的多项式。具体来说,输入如同以下形式:

a1*n^b1+a2*n^b2+...+at*n^bt

输出格式

该算法的复杂度,请以最简形式输出。

你可以理解为,如果你在数学考试上遇到了这题,你需要输出你最后会填在答题纸上的那种答案,例如 O(n^0) 需要被简单为 1

样例输入

100*n^2+1*n^3

样例输出

O(n^3)

样例输入

0*n^9+10*n^5+22*n^3

样例输出

O(n^5)

样例输入

99*n^0

样例输出

O(1)

#include <iostream>
#include <string>
#include <cstdio>
using namespace std;
int main(){
    int maxs=0;
    int xs,num;
    while(scanf("%d*n^%d+",&xs,&num)!=EOF)
    {
        if(xs) maxs=max(maxs,num);
    }
    if(maxs==0){
        cout<<"O(1)";
    }else if(maxs==1){
        cout<<"O(n)";
    }else{
        cout<<"O(n^"<<maxs<<")";
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值