POJ1472浅析------Instant Complexity

POJ1472-Instant Complexity 测试数据 POJ1472-Instant Complexity 测试数据。数据来源:Southwestern European Regional Contest 1997 立即下载

大致题意:

给出一段Pascial程序,计算其时间复杂度(能计算的项则计算,不能计算则化到最简的关于n的表达式O(n),并把各项根据n的指数从高到低排列),输出时,系数为0的项不输出,系数为1的项不输出系数,指数为1的项不输出指数。

一段程序只有唯一一个BEGIN,代表程序的开始。与其对应的为最后的END,代表程序的结束。

一段程序最多只有10层循环嵌套,循环的入口为LOOP,一个LOOP对应一个END,代表该层循环的结束。

一段程序中OP的个数不限。

 

LOOP是循环的入口,其后面的数据可能是常量(非负整数),也可能是变量n,代表循环体执行的次数。

OP是语句,其后面的数据只能为常量(非负整数),代表该语句执行的次数。

 

解题思路:

此题就是一条表达式化简的模拟题,用递归直接模拟。

以第一个样例说明处理方法:

BEGIN

  LOOP n

    OP 4

    LOOP 3

      LOOP n

        OP 1

      END

      OP 2

    END

    OP 1

  END

  OP 17

END

从该例子我们可以得到一条关于n的最初表达式:

  n*(4+3*(n*1+2)+1)+17

稍微化简一下,合并同一层的OP值,得到了

n*(3*(n*1+2)+5)+17

不难看出每一个循环体都能写成k*n+i形式的子表达式,其中loop是*关系,op是+关系

 

由于最大循环次数为10,那么我们用exp[11]存储多项式的每一项的指数i和系数k=exp[i],其中exp[0]其实就是常数项,由OP语句产生

 

注意LOOP后面可能输入字符n,也可能输入数字,处理方法:用字符串输入s,若为s[0]==n,则直接作字符处理;若s[0]!=n,则认为是数字串,把它转换为int再处理。

————————————————

这道题让我纠结了好久好久,甚至钻进自己想的循环里出不来,最后还是没有解决办法。于是网上走了一下题解,发现别人写的很巧妙,借鉴了一下,部分有所改动。

参考程序地址:http://blog.youkuaiyun.com/lyy289065406/article/details/6648640

 

我的代码如下:

#include<stdio.h>
#include<string.h>     
int solve(int* exp)  
{  
    int i, x, a;
    int TempExp[11];
    char s[30];  
    scanf("%s", s);  
  
    if(s[0]=='E')      
        return 0;  
    else if(s[0]=='B')   
        while(solve(exp));     
    else if(s[0]=='O')    
    {  
        scanf("%s", s);  
        sscanf(s,"%d",&x);
        exp[0] += x; 
        return solve(exp);  
    }  
    else       
    {     
        for(i=0; i<11; i++)  TempExp[i]=0;
        scanf("%s", s);  
        while(solve(TempExp));  
  
        if(s[0]=='n')     
        {  
            for(i=10;i>0;i--)  
                TempExp[i]=TempExp[i-1];    
            TempExp[0]=0;  
        }  
        else   
        {  
            sscanf(s,"%d",&x);
            for(i=0;i<11;i++)  
                TempExp[i]*=x;  
        }  
        for(i=0;i<11;i++)  
            exp[i]+=TempExp[i];  
    }  
    return 1;  
}  
  
int main()  
{   
    char s[6];  
    int t, test, i, flag, mark; 
    int exp[11]={0};
    scanf("%d", &test);  
    for(t=1;t<=test;t++)  
    {  
        for(i=0; i<11; i++)  exp[i]=0;
        solve(exp);  
        printf("Program #%d\nRuntime = ", t);
        flag=1; mark=0;
        for(i=10; i>=0; i--)
        {   
                if(exp[i]==0)
                    continue;
                if(!flag) 
                    printf("+");
                if(exp[i]==1)
                {   mark=1;flag=0;
                    if(i==0)
                        printf("1");
                    else if(i==1)
                        printf("n");
                    else printf("n^%d", i);               
                }
                else {   mark=1;flag=0;
                         if(i==0)
                             printf("%d",exp[i]);
                         else if(i==1)
                             printf("%d*n",exp[i]);
                         else 
                             printf("%d*n^%d",exp[i], i);
                     }               
                    
        }
        if(!mark)
            printf("0");
        printf("\n\n");
    }  
    return 0;  
} 



 

 

 

POJ1472-Instant Complexity 北大POJ1472-Instant Complexity 解题报告+AC代码 立即下载

相关推荐

433MHz无线通信避坑指南:如何解决信号干扰和误码问题

本文深入探讨433MHz无线通信中的信号干扰和误码问题,提供从射频前端设计到协议优化的全链路解决方案。通过天线匹配、电源噪声抑制、曼彻斯特编码改进及实时频点切换等技术,显著提升通信稳定性和距离。适合智能家居和工业无线控制系统的开发者参考。

weixin_29288313的博客 417

poj1472--Instant Complexity(模拟)

Instant Complexity Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status   Appoint description:  System Crawler  (2013-03-03) Description Anal

随风的专栏 1270

SAP SD 顾问面试问题 consultant interview questionnaire

以下是我个人目前面试团队 SD顾问问题的小结,希望对大家有所帮助, 也可能有回答错误的地方,希望同行不吝赐教。 也希望各位顾问们讲你们遇到的一些面试问题做个跟贴,方便大家共同进步,谢谢。   面试问题清单:  一、销售订单类型影响: 可用性检查,交货类型,输出,信贷,定价,需求,报表,合作伙伴,文本,不完整日志,交货开票,订单开票,公司间开票,统计组,屏幕顺序组,参数文件...

weixin_33825683的博客 1809

poj1472

题目较复杂。模拟+字符串处理

小小小小杜 801

手把手用LTspice仿真运算放大器电路:从虚短虚断到频响分析

本文通过LTspice仿真软件,手把手教你从搭建基础运算放大器电路开始,验证虚短虚断原理,并逐步深入频响分析与稳定性探究。内容涵盖反相/同相放大器、积分器仿真,导入真实运放模型进行蒙特卡洛分析,以及利用交流分析和波特图评估电路性能,帮助工程师和学生将抽象理论转化为直观、可测量的仿真结果,提升电路设计实战能力。

salt9的博客 1095

【脑电分析系列】第7篇:频域分析基石 — 功率谱密度(PSD)的计算与常见方法对比

本文探讨了脑电图(EEG)频域分析的核心方法——功率谱密度(PSD)。通过对比基于快速傅里叶变换的周期图法和更稳健的Welch's方法,指出后者通过分段、加窗和平均处理,能有效降低估计方差,更适合分析非稳态的脑电信号。文章详细解析了关键参数设置对频率分辨率和统计稳定性的影响,并提供了Python计算实现。PSD分析将复杂的脑电信号转换为直观的频域特征,为研究认知功能和神经疾病提供重要依据。

qq_32516809的博客 1805

POJ-1472(循环复杂度,递归分治 + 多项式)

题目:http://poj.org/problem?id=1472 核心是递归

还有多远 591

【干货】S7-PLCSIM Advanced V3.0 无法启动实例( Error Code:-30,LicenseNotFound)问题解决方法

【干货】S7-PLCSIM Adavanced V3.0 无法启动实例( Error Code:-30,LicenseNotFound)问题解决方法

handinvv的博客 5万+

POJ 1472 Instant Complexity

首先不得不说我的英语水平太差,还有就是对题目很不敏感,我竟然看了好久没有看懂题意是什么,然后在网上搜的时候也没有发现解析题意的,然后又看了几遍才看懂的! 题目大致意思:给你一段程序,让你求出执行这段程序的时间复杂度,LOOP m代表循环m次,OP m代表的是对加m,end代表是一个LOOP循环语句的结束,最后一个END代表的是程序的结束! 昨天晚上写的时候题目没有分析完全,然后就是写的代码有b

生活总是要微笑着面对~ 849

把 LangGraph 当“工作流引擎”用:与传统 BPM 的差异与融合策略

首先,我们来回顾一下有限状态机(FSM)的基本定义——一个 FSM 可以用一个五元组MQΣδq0FMQΣδq0​FQQQ有限状态集合,包含 FSM 所有可能的状态;Σ\SigmaΣ有限输入字母表,包含 FSM 所有可能的输入;δ\deltaδ状态转移函数,定义了 FSM 从当前状态q∈Qq \in Qq∈Q接收输入σ∈Σσ∈Σ后,转移到的下一个状态q′∈Qq' \in Qq′∈Q,即δQ×Σ→QδQ×Σ→Q。

AI 原生应用开发的博客 227

WRFDA如何读取风云四号A 星的GIIRS数据?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1029

4103:踩方格

4103:踩方格 查看提交统计提示提问 总时间限制: 1000ms 内存限制: 65536kB 描述 有一个方格矩阵,矩阵边界在无穷远处。我们做如下假设: a. 每走一步时,只能从当前方格移动一格,走到某个相邻的方格上; b. 走过的格子立即塌陷无法再走第二次; c. 只能向北、东、西三个方向走; 请问:如果允许在方格矩阵上走n步,共有多少种不同的方案。2种走法只要有一步不一样,即被认为是不同的方案。 输入 允许在方格上行走的步数n(n <= 20) 输出 计算出的方案数量 样例输入

weixin_43368077的博客 320

[Python从零到壹] 十三.机器学习之聚类算法四万字总结全网首发(K-Means、BIRCH、树状聚类、MeanShift)

欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望对您有所帮助,文章中不足之处也请海涵。Python系列整体框架包括基础语法10篇、网络爬虫30篇、可视化分析10篇、机器学习20篇、大数据分析20篇、图像识别30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的关注、点赞和转发就是对秀璋最大的支持,知识无价人有情,希望

杨秀璋的专栏 2万+

目标检测中的Distribution Focal Loss原理与应用

目标检测中的损失函数是模型训练的核心组件,直接影响定位精度和收敛稳定性。Distribution Focal Loss(DFL)创新性地将边界框坐标回归转化为离散概率分布建模,通过softmax和交叉熵计算损失。这种设计解决了传统L1/L2损失对微小偏移不敏感、梯度突变等问题,同时继承了Focal Loss对困难样本的注意力机制。在YOLO系列目标检测框架中,DFL与CIoU Loss配合使用,显著提升了小目标检测和遮挡场景下的性能。工程实践中,通过调整reg_max和gamma等参数,可以平衡计算开销与定

weixin_34259232的博客 490

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

POJ 1472 Instant Complexity

又是模拟啊!!!!! 题目大意: 给出一段程序,只有一个“BEGIN”在第一行作为程序的开始,对应在程序的结尾有一个“END”,程序内部有“LOOP”(循环)和“OP”(语句),每一个“OP”后带一个常数,表示“OP”执行几次,每一个“LOOP”对应一个“END”,在“LOOP”到“END”范围内的语句都要循环执行“LOOP”后面的数字的次数,这个数字有可能是常数,有可能是变...

dhn37379的博客 153

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

POJ 1472 Instant Complexity(大模拟 判断程序执行次数)

POJ 1472题目大意只含4个语句BEGIN, END, LOOP OP和数字,让你判断一共操作多少次,结果以多项式的形式输出.分析对于一些模拟题先手动模拟一下就会发现规律,我们可以把LOOP语句看成前括号,END语句看成后括号,这样这道题就和模拟带括号的算数差不多了。 我们可以用一个栈来进行操作,遇见LOOP k就把k进栈在把前括号”(“进栈,遇见OP k就把k进栈,遇见END把“)”进栈。

AIDreamer 614

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

POJ 1472

递归模拟,代码写的很烂还参考了网上的

LEGION的专栏 543

POJ 1472Instant Complexity(模拟+dfs)

Instant Complexity Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2123   Accepted: 737 Description Analyzing the run-time complexity of algorithms is an imp

提拉米苏的博客 447

POJ 1472 Instant Complexity

又见神模拟题。。。。。 虽然处理起来感觉比较麻烦,但是思路还是比较清晰的,就是一个普通的栈。代码写的挫了一点.... 注意 LOOP 0 的情况。 #include #include #include #include #include #include #include using namespace std; struct N { int ty,coe,in

自在飞花 1158

poj 踩方格

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33973609的博客 387

POJ-1472 Instant Complexity 模拟

相当于表达式计算一般,用递归进行处理,将BEGIN视作是一个LOOP,每次进入LOOP则进行多条语句处理,知道遇到END位置,结束这个LOOP。 代码如下: #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;cstdio&gt; #include &lt;cstring&gt; #include &lt;...

weixin_33810302的博客 137

OpenJudge4103 踩方格

题意: 有一个方格矩阵,矩阵边界在无穷远处。我们做如下假设: a. 每走一步时,只能从当前方格移动一格,走到某个相邻的方格上; b. 走过的格子立即塌陷无法再走第二次; c. 只能向北、东、西三个方向走; 请问:如果允许在方格矩阵上走n步,共有多少种不同的方案。2种走法只要有一步不一样,即被认为是不同的方案。 思路: DFS…….只需要注意每次重置vis数组就好23...

Keep eating codes! 293

POJ 1472.Instant Complexity

题目:http://poj.org/problem?id=1472 AC代码(C++): #include #include #include #include #include #include #include #define INF 0x3f3f3f3f #define eps 1e-8 typedef unsigned long long ULL; usi

njyexiong的博客 253

深度优先搜索--算法(踩方格openjudge 4103)

描述 有一个方格矩阵,矩阵边界在无穷远处。我们做如下假设: a.    每走一步时,只能从当前方格移动一格,走到某个相邻的方格上; b.    走过的格子立即塌陷无法再走第二次; c.    只能向北、东、西三个方向走; 请问:如果允许在方格矩阵上走n步,共有多少种不同的方案。2种走法只要有一步不一样,即被认为是不同的方案。 输入

Randyhe_的博客 1303
上一篇: recordset的rs.open语句是怎样的
下一篇: poj2033------Alphacode
monkey7777
博客等级 码龄15年 55粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值