POJ 1472:Instant Complexity 模拟时间复杂度
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 1908 | Accepted: 658 |
Description
should be preferred.
Generally, one determines the run-time of an algorithm in relation to the `size' n of the input, which could be the number of objects to be sorted, the number of points in a given polygon, and so on. Since determining a formula dependent on n for the run-time
of an algorithm is no easy task, it would be great if this could be automated. Unfortunately, this is not possible in general, but in this problem we will consider programs of a very simple nature, for which it is possible. Our programs are built according
to the following rules (given in BNF), where < number > can be any non-negative integer:
< Program > ::= "BEGIN" < Statementlist > "END" < Statementlist > ::= < Statement > | < Statement > < Statementlist > < Statement > ::= < LOOP-Statement > | < OP-Statement > < LOOP-Statement > ::= < LOOP-Header > < Statementlist > "END" < LOOP-Header > ::= "LOOP" < number > | "LOOP n" < OP-Statement > ::= "OP" < number >
The run-time of such a program can be computed as follows: the execution of an OP-statement costs as many time-units as its parameter specifies. The statement list enclosed by a LOOP-statement is executed as many times as the parameter of the statement indicates,
i.e., the given constant number of times, if a number is given, and n times, if n is given. The run-time of a statement list is the sum of the times of its constituent parts. The total run-time therefore generally depends on n.
Input
END, LOOP and OP or in an integer value. The nesting depth of the LOOP-operators will be at most 10.
Output
terms, and print it in the form "Runtime = a*n^10+b*n^9+ . . . +i*n^2+ j*n+k", where terms with zero coefficients are left out, and factors of 1 are not written. If the runtime is zero, just print "Runtime = 0".
Output a blank line after each test case.
Sample Input
2
BEGIN
LOOP n
OP 4
LOOP 3
LOOP n
OP 1
END
OP 2
END
OP 1
END
OP 17
END BEGIN
OP 1997 LOOP n LOOP n OP 1 END END
END
Sample Output
Program #1
Runtime = 3*n^2+11*n+17 Program #2
Runtime = n^2+1997
又是一道很麻烦的模拟。。。输出结果的时候有很多种情况要考虑。
代码:
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#include <stack>
#pragma warning(disable:4996)
using namespace std; int oper[15];
int coe[15];
string op, op2; int change(string x)
{
int res = 0;
int i, len = x.length();
for (i = 0; i < len; i++)
{
res = res * 10 + x[i] - '0';
}
return res;
}
int main()
{
//freopen("i.txt", "r", stdin);
//freopen("o.txt", "w", stdout); int i, test, num, flag, another_flag;
int j, coe_one, n_num;
cin >> test; for (i = 1; i <= test; i++)
{
cout << "Program #" << i << endl;
cin >> op; memset(coe, 0, sizeof(coe));
num = 0; while (num != -1)
{
cin >> op;
if (op == "LOOP")
{
cin >> op2;
if (op2 == "n")
{
oper[num++] = -1;
}
else
{
oper[num++] = change(op2);
}
}
else if (op == "END")
{
num--;
}
else if (op == "OP")
{
cin >> op2;
coe_one = 1;
n_num = 0;
for (j = num - 1; j >= 0; j--)
{
if (oper[j] == -1)
{
n_num++;
}
else
{
coe_one = coe_one*oper[j];
}
}
coe[n_num] = coe[n_num] + coe_one * change(op2);
}
} cout << "Runtime = "; flag = 0;
another_flag = 0;
for (j = 14; j >= 0; j--)
{
if (coe[j] == 0)
{
continue;
}
else
{
another_flag = 1;
if (j == 0)
{
if (flag == 0)
{
flag = 1;
cout << coe[j];
}
else
{
cout << "+" << coe[j];
}
}
else if (j == 1)
{
if (flag == 0)
{
flag = 1;
if (coe[j] != 1)
cout << coe[j] << "*n";
else
cout << "n";
}
else
{
if (coe[j] != 1)
cout << "+" << coe[j] << "*n";
else
cout << "+n";
}
}
else
{
if (flag == 0)
{
flag = 1;
if (coe[j] != 1)
cout << coe[j] << "*n^" << j;
else
cout << "n^" << j;
}
else
{
if (coe[j] != 1)
cout << "+" << coe[j] << "*n^" << j;
else
cout << "+n^" << j;
}
} }
}
if (another_flag == 0)
cout << 0;
cout << endl << endl;
} //system("pause");
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
POJ 1472:Instant Complexity 模拟时间复杂度的更多相关文章
- POJ 1472 Instant Complexity 应该叫它编程题。。
题目:http://poj.org/problem?id=1472 这个题目是分到“模拟题”一类的,我觉得模拟的成分比较少,主要考察编程能力.独立写完这个题特别兴奋...所以我必须好好说一说,独家哦. ...
- Instant Complexity(模拟,递归)
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 1535 Accepted: 529 Description Analyz ...
- Instant Complexity - POJ1472
Instant Complexity Time Limit: 1000MS Memory Limit: 10000K Description Analyzing the run-time comple ...
- poj 1472(递归模拟)
题意:就是让你求出时间复杂度. 分析:由于指数最多为10次方,所以可以想到用一个数组保存各个指数的系数,具体看代码实现吧! 代码实现: #include<cstdio> #include& ...
- HDU 2494/POJ 3930 Elevator(模拟)(2008 Asia Regional Beijing)
Description Too worrying about the house price bubble, poor Mike sold his house and rent an apartmen ...
- poj 2632 Crashing Robots 模拟
题目链接: http://poj.org/problem?id=2632 题目描述: 有一个B*A的厂库,分布了n个机器人,机器人编号1~n.我们知道刚开始时全部机器人的位置和朝向,我们可以按顺序操控 ...
- POJ 2014 Flow Layout 模拟
http://poj.org/problem?id=2014 嘻嘻2014要到啦,于是去做Prob.ID 为2014的题~~~~祝大家新年快乐~~ 题目大意: 给你一个最大宽度的矩形,要求把小矩形排放 ...
- POJ 2632 Crashing Robots (模拟 坐标调整)(fflush导致RE)
题目链接:http://poj.org/problem?id=2632 先话说昨天顺利1Y之后,直到今天下午才再出题 TAT,真是刷题计划深似海,从此AC是路人- - 本来2632是道略微恶心点的模拟 ...
- poj 1888 Crossword Answers 模拟题
Crossword Answers Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 869 Accepted: 405 D ...
随机推荐
- PullToRefreshScrollView刷新图标和字体的设定
首先添加pullrefresh的libaraly 设置下拉刷新上拉加载时的文本和图片,直接在java代码中添加 mPullToRefreshScrollView.getLoadingLayoutPro ...
- iOS 开发之 开发一款自己的美颜相机
以前在公司做项目时很少遇到对相机.图片进行处理的(非公司业务),只是偶尔上传,裁剪,预览下.近期自己准备写个相机应用,把图片处理的这些技术细节整理下.包含美颜相机,图片美化,简单拼图,艺术拼图等主要模 ...
- Java解析json数组三种情况
package com.example.demo.json; import java.util.Map; import com.alibaba.fastjson.JSON; import com.al ...
- SD-WAN基本介绍
SD-WAN是什么? SD-WAN,即软件定义广域网络,是将SDN技术应用到广域网场景中所形成的一种服务.这种服务用于连接广阔地理范围的企业网络.数据中心.互联网应用及云服务,旨在帮助用户降低广域网的 ...
- 怎么样运行jar
一.制作jar文件 在制作.jar 文件之前你必须先编译好你的.java文件.假设我们的文件目录是c:javamyJavahelloHello.java 现在假设Hello.java的文件内容为: / ...
- 使用SourceTree的注意事项
1.我使用SourceTree时,使用的下面的配置全局忽略: *~ .DS_Store xcuserdata 2. 远程仓库的url路径不要使用域名,而应该使用ip地址.否则会显示“这是一个无效的ur ...
- 【剑指Offer面试编程题】题目1524:复杂链表的复制--九度OJ
题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点). 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第 ...
- DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. The AcquireConnection method call to the connection manager "XXX" failed with error code 0xC0209303.
问题: 今天写了一个新的SSIS的ETL包,运行报如下错误. DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. The AcquireConnec ...
- TP-Link TL-WR841N v14 CVE-2019-17147 缓冲区溢出漏洞分析笔记v2018.12.31
0x00 背景 Httpd服务中的缓冲区溢出漏洞 复现参考文章https://www.4hou.com/posts/gQG9 Binwalk -Me 解压缩 File ./bin/busybox文件类 ...
- boost::program_options 解析命令行参数
源码: #include <boost/program_options.hpp> namespace po = boost::program_options; int main(int a ...