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<iostream>
#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相关推荐

  1. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

  2. POJ ZOJ题目分类

    POJ,ZOJ题目分类(多篇整合版,分类很细致,全面) 标签: 题目分类POJ整理 2015-04-18 14:44 1672人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: ACM资料(5) ...

  3. POJ,ZOJ题目分类(多篇整合版,分类很细致,全面)

    水题: 3299,2159,2739,1083,2262,1503,3006,2255,3094 初级: 一.基本算法:        (1)枚举 (1753,2965)       (2)贪心(13 ...

  4. POJ 超详细分类

    POJ 各题算法 1000    A+B Problem            送分题     49%    2005-5-7 1001    Exponentiation         高精度   ...

  5. poj题目详细分类及算法推荐题目

    DP:  1011   NTA                 简单题  1013   Great Equipment     简单题  1024   Calendar Game       简单题  ...

  6. ACM POJ 题目分类(完整整理版本)

    DP: 1011   NTA                 简单题  1013   Great Equipment     简单题  1024   Calendar Game       简单题   ...

  7. PUK ACM题目分类

    acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP:  1011   NTA                 简单题  1013   Great Equipment     简单题  102 ...

  8. UVa Online Judge 工具網站

    UVa Online Judge 工具網站 转自http://www.csie.ntnu.edu.tw/~u91029/uva.html Lucky貓的ACM園地,Lucky貓的 ACM 中譯題目 M ...

  9. pku,zju题目分类

    哎呦喂,直接ctrl+A了.话说浙江大学的题还见过的呢.. 公告: [意见反馈][官方博客]   ural pku Zju 题目分类 收藏   感谢 mugu 的提供.... Ural Problem ...

  10. ZOJ 题目分类,学校的一个巨巨做的。

     DP: 1011      NTA                    简单题 1013      Great Equipment        简单题 1024      Calendar ...

最新文章

  1. haystack全文检索框架
  2. 【必读】2019年深度学习自然语言处理最新十大发展趋势, 附报告下载
  3. Android11还能自定义相机吗,安卓用户又少了一项自由,Android 11不再支持更改默认相机程序...
  4. HDU 2187 悼念512汶川大地震遇难同胞——老人是真饿了
  5. python enumeration_python枚举防止无效的属性分配
  6. 向上累积频数怎么算_视频号怎么运营?小白也能迅速get的技巧
  7. Python使用marshal模块操作二进制文件
  8. HT for Web基于HTML5的图像操作(三)
  9. mac 终极教程,最全,最实用的教程
  10. MATLAB识别实验,基于MATLAB的图像识别
  11. matlab lte rsrp,LTE 下行速率和SINR、RSRP什么关系?
  12. 怎么用c语言编辑出天依蓝,我天依蓝
  13. jekyll编写济南少儿国画博客
  14. java 获得唯一 数字_java生成唯一数字
  15. Linux、Windows获取主板序列号和UUID
  16. 搭建CA并签发数字证书
  17. Web用户体验设计提升实践
  18. C++黑客攻击系统-重复验证
  19. 服务器重装2012,Windows Server 2012安装初体验
  20. 气象数据NC批量转TIF及月尺度计算年尺度-同理其他指标

热门文章

  1. 博客系统的设计与实现_企业车辆管理系统设计与实现
  2. java和php哪个开发网站好,网站开发,Java和php两种开发语言,应该选哪一种,你知道吗?...
  3. HTML form -enctype
  4. Ubuntu上通过FinalShell或Asbru访问CentOS虚拟机
  5. 吴军:为什么计算机不是万能的
  6. 利用SciTE的导出功能保持代码语法着色效果
  7. Python案例:GUI用户注册信息管理系统
  8. 【BZOJ4196】【codevs4621】软件包管理器,树链剖分练习
  9. java线程工作内存在栈中吗_JVM常见面试题解析
  10. python中read函数解释_Python内置函数解释教程,readwill(非常详细的代码演示截图),详解,看,了,就,会,很...