Instant Complexity--POJ 1472
1、题目类型:模拟、栈。
2、解题思路:题意,给你一个源程序,要你计算出程序运行的时间复杂度;(1)定义结构体Node,并根据需要重载其运算符"+"和"*";(2)模拟程序的执行顺序,"LOOP"和"OP"便进栈,"END"则弹出栈;(3)出栈过程中,对"OP"进行"+",对"LOOP"进"*"操作并记录在 ans 中;(4)ans 结构体,表示一个长度为11数组,第 i 位表示为 n 的 i 次方为多少;(5)Print()输出多项式形式,注意多项式系数为 0 的情况,和 n 的 1 次方 和 0 次方两种特殊情况输出的表现形式。
3、注意事项:注意为出栈进行操作时,对Node结构体中运算符的重载。
4、实现方法:
#include<stack>
#include<string>
using namespace std;
struct Node{
int num[11];
bool flag;
struct Node operator+(Node p)
{
Node t;
for(int i=0;i<11;i++)
t.num[i]=p.num[i]+num[i];
return t;
}
struct Node operator*(Node p)
{
Node t;
memset(t.num,0,sizeof(t.num));
for(int i=0;i<11;i++)
for(int j=0;j<11;j++)
{
if(i+j>10) continue;
t.num[i+j]+=num[i]*p.num[j];
}
return t;
}
};
Node ans;
stack<Node>sta;
void Solve()
{
while(!sta.empty())
sta.pop();
char str[10],t[10];
scanf("%s",str);
Node tmp,t1;
memset(tmp.num,0,sizeof(tmp.num));
tmp.num[0]=1;
tmp.flag=1;
sta.push(tmp);
while(!sta.empty())
{
scanf("%s",str);
memset(tmp.num,0,sizeof(tmp.num));
if(strcmp(str,"LOOP")==0)
{
scanf("%s",t);
if(strcmp(t,"n")==0)
{
tmp.num[1]=1;
tmp.flag=1;
}
else
{
int a;
sscanf(t,"%d",&a);
tmp.num[0]=a;
tmp.flag=1;
}
sta.push(tmp);
continue;
}
if(strcmp(str,"OP")==0)
{
scanf("%s",t);
if(strcmp(t,"n")==0)
{
tmp.num[1]=1;
tmp.flag=0;
}
else
{
int a;
sscanf(t,"%d",&a);
tmp.num[0]=a;
tmp.flag=0;
}
sta.push(tmp);
continue;
}
if(strcmp(str,"END")==0)
{
t1=sta.top();
sta.pop();
while(t1.flag!=1)
{
tmp=tmp+t1;
t1=sta.top();
sta.pop();
}
tmp=tmp*t1;
tmp.flag=0;
if(sta.empty())
{
ans=tmp;
return;
}
sta.push(tmp);
continue;
}
}
}
void Print()
{
int i;
bool judge=1;
for(i=10;i>=0;i--)
{
if(ans.num[i] && judge)
{
judge=0;
if(i==1)
{
if(ans.num[i]!=1)
printf("%d*n",ans.num[i]);
else
printf("n");
}
else
if(i)
{
if(ans.num[i]!=1)
printf("%d*n^%d",ans.num[i],i);
else
printf("n^%d",i);
}
else printf("%d",ans.num[0]);
}
else
{
if(ans.num[i] && !judge)
{
if(i==1)
{
if(ans.num[i]!=1)
printf("+%d*n",ans.num[i]);
else
printf("+n");
}
else
if(i)
{
if(ans.num[i]!=1)
printf("+%d*n^%d",ans.num[i],i);
else
printf("+n^%d",i);
}
else
printf("+%d",ans.num[0]);
}
}
}
if(judge)
printf("0");
cout<<endl<<endl;
}
int main()
{
int c,i;
cin>>c;
for(i=1;i<=c;i++)
{
Solve();
printf("Program #%d\n",i);
printf("Runtime = ");
Print();
}
return 0;
}
转载于:https://www.cnblogs.com/yongze103/archive/2010/10/06/1844681.html
Instant Complexity--POJ 1472相关推荐
- POJ前面的题目算法思路【转】
1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...
- POJ ZOJ题目分类
POJ,ZOJ题目分类(多篇整合版,分类很细致,全面) 标签: 题目分类POJ整理 2015-04-18 14:44 1672人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: ACM资料(5) ...
- POJ,ZOJ题目分类(多篇整合版,分类很细致,全面)
水题: 3299,2159,2739,1083,2262,1503,3006,2255,3094 初级: 一.基本算法: (1)枚举 (1753,2965) (2)贪心(13 ...
- POJ 超详细分类
POJ 各题算法 1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 ...
- poj题目详细分类及算法推荐题目
DP: 1011 NTA 简单题 1013 Great Equipment 简单题 1024 Calendar Game 简单题 ...
- ACM POJ 题目分类(完整整理版本)
DP: 1011 NTA 简单题 1013 Great Equipment 简单题 1024 Calendar Game 简单题 ...
- PUK ACM题目分类
acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ...
- UVa Online Judge 工具網站
UVa Online Judge 工具網站 转自http://www.csie.ntnu.edu.tw/~u91029/uva.html Lucky貓的ACM園地,Lucky貓的 ACM 中譯題目 M ...
- pku,zju题目分类
哎呦喂,直接ctrl+A了.话说浙江大学的题还见过的呢.. 公告: [意见反馈][官方博客] ural pku Zju 题目分类 收藏 感谢 mugu 的提供.... Ural Problem ...
- ZOJ 题目分类,学校的一个巨巨做的。
DP: 1011 NTA 简单题 1013 Great Equipment 简单题 1024 Calendar ...
最新文章
- haystack全文检索框架
- 【必读】2019年深度学习自然语言处理最新十大发展趋势, 附报告下载
- Android11还能自定义相机吗,安卓用户又少了一项自由,Android 11不再支持更改默认相机程序...
- HDU 2187 悼念512汶川大地震遇难同胞——老人是真饿了
- python enumeration_python枚举防止无效的属性分配
- 向上累积频数怎么算_视频号怎么运营?小白也能迅速get的技巧
- Python使用marshal模块操作二进制文件
- HT for Web基于HTML5的图像操作(三)
- mac 终极教程,最全,最实用的教程
- MATLAB识别实验,基于MATLAB的图像识别
- matlab lte rsrp,LTE 下行速率和SINR、RSRP什么关系?
- 怎么用c语言编辑出天依蓝,我天依蓝
- jekyll编写济南少儿国画博客
- java 获得唯一 数字_java生成唯一数字
- Linux、Windows获取主板序列号和UUID
- 搭建CA并签发数字证书
- Web用户体验设计提升实践
- C++黑客攻击系统-重复验证
- 服务器重装2012,Windows Server 2012安装初体验
- 气象数据NC批量转TIF及月尺度计算年尺度-同理其他指标
热门文章
- 博客系统的设计与实现_企业车辆管理系统设计与实现
- java和php哪个开发网站好,网站开发,Java和php两种开发语言,应该选哪一种,你知道吗?...
- HTML form -enctype
- Ubuntu上通过FinalShell或Asbru访问CentOS虚拟机
- 吴军:为什么计算机不是万能的
- 利用SciTE的导出功能保持代码语法着色效果
- Python案例:GUI用户注册信息管理系统
- 【BZOJ4196】【codevs4621】软件包管理器,树链剖分练习
- java线程工作内存在栈中吗_JVM常见面试题解析
- python中read函数解释_Python内置函数解释教程,readwill(非常详细的代码演示截图),详解,看,了,就,会,很...