POJ 1472 Instant Complexity 应该叫它编程题。。
题目:http://poj.org/problem?id=1472
这个题目是分到“模拟题”一类的,我觉得模拟的成分比较少,主要考察编程能力。独立写完这个题特别兴奋。。。所以我必须好好说一说,独家哦。。。
题意是计算一段伪代码的时间复杂度,整体代码夹在“BEGIN”和“END”之间,中间有很多循环语句,夹在“LOOP X”和“END”之间,表示循环X次。第一眼一看很难下手,其实只要想到一点这个题就非常水了:
“BEGIN”语句可以看做”LOOP 1“。
这样的话整个程序的递归结构就明显了,就是LOOP调用LOOP,直接写个LOOP函数就是了。。
不过这个题除去恶心到死的输出格式,还是有值得注意的地方的,比如递归过程中申请的临时空间是不方便传回的,而且函数结束后这些空间没法free掉,所以我们需要先申请空间,然后传入下一次递归,这样等下一次递归结束以后方便我们free掉,不然工程编码时就造成内存泄露了,不过对于ACM来说无所谓了。。。
最后说一下输出格式,系数大于一才输出系数,指数大于1才输出指数,要注意认真处理系数和指数是1和0的时候。还有注意输出0的情况,因为这个错了好久。
第一次写这么多题解。。最后是代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h> //循环lpNum次,结果存入ans
void loop(int *ans, char *lpNum)
{
char s[], loopNum[] = {};
while(scanf("%s", s) && s[] != 'E')
{
if(s[] == 'L')
{
//注意先申请tmp数组再递归,不要在递归的时候申请
//最好动态申请,便于释放,其他地方也是
//int tmp[11] = {0};
int *tmp = new int[];
memset(tmp, , *sizeof(int)); scanf("%s", loopNum);
loop(tmp, loopNum);
for(int i = ; i <= ; i++)
ans[i] += tmp[i]; //调用结束后释放,最近在学习写工程。。
//delete tmp;
}
else if(s[] == 'O')
{
int x;
scanf("%d", &x);
ans[] += x;
}
}
if(lpNum[] == 'n')
{
for(int i = ; i > ; i--)
ans[i] = ans[i-];
ans[] = ;
}
else
{
int x = atoi(lpNum);
for(int i = ; i <= ; i++)
ans[i] *= x;
}
} int main()
{
int t;
int ans[];
scanf("%d", &t);
for(int item = ; item <= t; item++)
{
memset(ans, , sizeof(ans));
scanf("%*s");
loop(ans, ""); //下面全是输出格式,不要看了,眼花。。
printf("Program #%d\nRuntime = ", item);
bool first = ;
for(int i = ; i >= ; i--)
{
if(ans[i] == )continue;
if(i == )printf("%s%d", first ? "" : "+", ans[]);
else if(ans[i] == )
printf("%sn", first ? "" : "+");
else if(ans[i] > )
printf("%s%d*n", first ? "" : "+", ans[i]);
if(i > )printf("^%d", i);
first = ;
}
if(first)printf("");
printf("\n\n");
}
return ;
}
OOOOOO
POJ 1472 Instant Complexity 应该叫它编程题。。的更多相关文章
- POJ 1472:Instant Complexity 模拟时间复杂度
Instant Complexity Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 1908 Accepted: 658 ...
- Instant Complexity - POJ1472
Instant Complexity Time Limit: 1000MS Memory Limit: 10000K Description Analyzing the run-time comple ...
- POJ C++程序设计 编程题#1 编程作业—STL1
编程题#1 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 下面的程序输出结 ...
- POJ C++程序设计 编程题#4 字符串操作
编程题#4: 字符串操作 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 给 ...
- POJ C++程序设计 编程题#3 编程作业—文件操作与模板
编程题#3: 整数的输出格式 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 1000kB 描述 利 ...
- POJ C++程序设计 编程题#2 编程作业—文件操作与模板
编程题#2: 实数的输出格式 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 1000kB 描述 ...
- POJ C++程序设计 编程题#1 编程作业—文件操作与模板
编程题#1 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 实现一个三维数组 ...
- POJ C++程序设计 编程题#3 编程作业—多态与虚函数
编程题 #3 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 下面的程序输出 ...
- POJ C++程序设计 编程题#2 编程作业—多态与虚函数
编程题#2 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 下面程序的输出结果 ...
随机推荐
- 数据绑定(八)使用Binding的RelativeSource
当一个Binding有明白的数据来源时能够通过为Source或ElementName赋值的办法让Binding与之关联,有的时候因为不能确定Source的对象叫什么名字,但知道它与作为Binding目 ...
- Robots协议具体解释
禁止搜索引擎收录的方法(robots.txt) 一.什么是robots.txt文件? 搜索引擎通过一种程序robot(又称spider),自己主动訪问互联网上的网页并获取网页信息.您能够在您的站点中创 ...
- 如何编译libcurl
1. Android •1.1配置 •1.2 Make •1.3的参数配置 2.iOS 3.windows 4.关于头文件 注释 本文档介绍了如何为Android,iOS和Windows编译libcu ...
- C#泛型比较大小
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- setValue 和 setObject 的区别
在使用NSMutableDictionary 的时候经常会使用setValue forKey 与 setObject forKey,他们经常是可以交互使用的. 1.setValue forKey的定义 ...
- C#基础篇02
首先:一个完整的方法是包括两部分的,代码和注释!!!! 程序的调试: 3:设置断点: 断点之前的程序已经确保正确,可是在断点后的部分可能出现错误,所以设置完断点后,直接点击启动,然后按F11逐步棸的 ...
- 衣联网络-亿能测试 安全测试沙龙 PPT资料免费下载
衣联网络-亿能测试 安全测试沙龙 PPT资料免费下载http://automationqa.com/forum.php?mod=viewthread&tid=2304&fromuid= ...
- 构建本地yum源之rpmbuild问题汇总
- check-rpaths的问题 今天在编译varnish的时候,遇到几个问题,其中一个就是出现如下错误: ...+ /usr/lib/rpm/check-rpaths /usr/lib/rpm/c ...
- Redis与Memcached对比
Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富,有字符串.链表.集合和有序集合.支持在服务器端计算集合的并,交和补集等.还支持多 ...
- WKWebView不显示提示框(Swift)
使用WKWebView的时候会出现明明自己做的一些页面有提示框, 为什么使用别人的页面提示框总是不显示, 其实很大部分原因是因为该提示框是通过JS调用的, 需要实现WKUIDelegate来进行监听 ...