题目描述
查看题目信息
众所周知,时间复杂度是一种有效地描述程序运行时间的增长速率的东西。
在本题中它被定义为,若一个算法在数据大小为 时程序进行 次计算,并且有函数 ,其中 只有一项并且没有常数系数,使得存在 ,使得对于任意 ,则我们称这个算法的时间复杂度是 。
根据定义,不难证明,对于任意一个多项式 ,若它的最高次项次数为 ,则它的复杂度为 。
现在告诉你一个算法的计算次数与数据规模的关系函数 ,定义如上,请求出它的复杂度。
输入格式
输入包含一行,代表 ,保证给定的是一个指数小于 的多项式。具体来说,输入如同以下形式:
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;
}