对于2017 D1 T2 这道题

实实在在是个码力题,非常考验耐心。

其实大体的思路并不是非常难想出来,但是要注意的小细节比较多。

题目链接:https://www.luogu.org/problemnew/show/P3952

思路

对于每一个程序,先读入L和O(),并将其中的时间复杂度抠出来。

其次整行读入字符串,即所给定的程序。

判断第一个字符是F or E

F i x y 需要把x y拿出来,把i压进栈

E 退栈 压进i后为了方便退栈及退栈时判断,用一个flag标记

每做完一个程序,与前面抠出来的时间复杂度对比判断yesnoerr即可。

注意

1.我的readx和ready函数比较暴力,直接截取常数和n可能存在的位置并保存。所以在考虑情况时,常数与n的位置不能搞错,也不能少考虑。

2.在每搞完一个程序时,要把初始值和标记都初始化一遍。

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <stack>
using namespace std;
int L,t,anso,codeo;//anso=0 O(1) anso=x O(n^x) 输入给的时间复杂度 codeo 自己算的时间复杂度 if anso==codeo yes else no if codeo==-1 err
string code[];//按行输入所给代码(F,E)
string ans;//读入给定的复杂度 O()
int readx(string x)
{
int num;
if(x[] >= '' && x[] <= '') num = x[]-'';
if(x[] >= '' && x[] <= '') num = (x[]-'')*+x[]-'';
if(x[] == 'n') num = ;
return num;
} //抠出给定的复杂度 x
int ready(string x)
{
int num;
if(x[] >= '' && x[] <= '' && x[] <= '' || x[] >= '') num = x[]-'';
if(x[] >= '' && x[] <= '' && x[] <= '' || x[] >= '') num = x[]-'';
if(x[] >= '' && x[] <= '' && x[] >= '' && x[] <= '') num = (x[]-'')*+x[]-'';
if(x[] >= '' && x[] <= '' && x[] >= '' && x[] <= '') num = (x[]-'')*+x[]-'';
if(x[] == 'n') num = ;
if(x[] == 'n') num = ;
return num;
}//抠出给定的复杂度 y
int check1()
{
int res;
if(ans[] == '') res = ;
if(ans[] == 'n')
{
if(ans[]<='' && ans[]>='')
res = ans[]-'';
if(ans[]<='' && ans[]>='')
res = (ans[]-'')* + ans[]-'';
}//记录输入给的复杂度
return res;
}
int check2()
{
stack<int> s;
int flag=-;//标记
bool fe[]={};//上面都是便于栈操作,fe来记录变量名
int res=,now=;//now来记录当前循环中的时间复杂度,res是整个程序的时间复杂度
bool cflag[]={};//记录变量是否重复 0 则没用过 1 用过 changeflag
int xnum,ynum; for(int i=;i<=L;i++)
{ if(code[i][]=='F')
{
int k=code[i][]-'a';
if(cflag[k]) return -;
s.push(k);
cflag[k] = ; xnum=readx(code[i]); ynum=ready(code[i]);
if(ynum-xnum>)
{
if(flag==-)
{
now++;
res=max(res,now);
fe[k]=;
}
}
if(xnum>ynum)
{
if(flag==-) flag=k;
}
} if(code[i][]=='E')
{
if(s.empty()) return -;
int k=s.top();
s.pop();cflag[k]=false;
if(flag==k) flag=-;
if(fe[k])
{
fe[k]=false;
now--;
}
}
}
if(s.size()) return -;
return res;
}
int main()
{
scanf("%d",&t);
while(t--)
{ scanf("%d ",&L);getline(cin,ans);
anso=check1(); for(int i=;i<=L;i++)getline(cin,code[i]);
codeo=check2(); if(codeo==-) cout<<"ERR"<<endl;
else
{
if(anso!=codeo) cout<<"No"<<endl;
if(anso==codeo) cout<<"Yes"<<endl;
}
}
return ;
}

【luogu P3952 时间复杂度】 题解的更多相关文章

  1. luogu P3952 时间复杂度 模拟

    题目链接 luogu P3952 时间复杂度 题解 直接模拟即可 注意不要直接return 我真是naive ...... 代码 #include<map> #include<sta ...

  2. [LUOGU] P3952 时间复杂度

    其实,也没那么难写 这种模拟题,仔细分析一下输入格式,分析可能的情况,把思路写在纸上,逐步求精,注意代码实现 主要思路就是算一个时间复杂度,和给出的复杂度比较,这就先设计一个函数把给出的复杂度由字符串 ...

  3. [NOIp2017] luogu P3952 时间复杂度

    跪着看评测很优秀. 题目描述 给你若干个程序,这些程序只有 For 循环,求这些程序的时间复杂度. Solution 大模拟.讲下细节. flag[i]flag[i]flag[i] 表示第 iii 位 ...

  4. P3952 时间复杂度

    P3952 时间复杂度 题目描述 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机 ...

  5. 洛谷 P3952 时间复杂度 解题报告

    P3952 时间复杂度 题目描述 小明正在学习一种新的编程语言A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会 ...

  6. 洛谷 P3952时间复杂度 (本地AC测评RE的伪题解)

    [题目描述] 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会来啦!下面请你编写 ...

  7. 洛谷 - P3952 - 时间复杂度 - 模拟

    https://www.luogu.org/problemnew/show/P3952 这个模拟,注意每次进入循环的时候把新状态全部入栈,退出循环的时候就退栈. 第一次就错在发现ERR退出太及时,把剩 ...

  8. 洛谷P3952 时间复杂度【字符串】【模拟】

    题目描述 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会来啦!下面请你编写程序 ...

  9. LOJ P3952 时间复杂度 noip 暴力 模拟

    https://www.luogu.org/problemnew/show/P3952 模拟,日常认识到自己zz. #include<iostream> #include<cstdi ...

随机推荐

  1. PowerDesigner 16.5 安装和卸载教程【含有安装文件】

    1 下载 下载地址:https://pan.baidu.com/s/1kqly0d8qU-QluEagXwh53g 密码:n1a3 下载之后目录结构如下: 2 安装教程 1 安装 1.双击安装文件,如 ...

  2. 从XCodeGhost事件看软件来源鉴别的重要性

    事件 事件引爆于9月18日乌云网公布的一则分析报告:"XCode编译器里有鬼 – XCodeGhost样本分析",这份纯粹的技术分析报告引发中国iOS生态链的众多开发者的关注. 引 ...

  3. [转]Debugging into .NET Core源代码的两种方式

    本文转自:http://www.cnblogs.com/maxzhang1985/p/6015719.html 阅读目录 一.前言 二.符号服务器 三.项目中添加ASP.NET Core源代码 四.写 ...

  4. AngularJS 实现 Table的一些操作(示例大于实际)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script ty ...

  5. C# Winform小程序:局域网设置NTP服务器、实现时间同步

    设置NTP服务器: NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议. 局域网不能连接Internet,可以设置一台计算机为NTP服务器. ...

  6. union、except和intersect查询

    1. union联合查询  (合并) select r.room_id from room r union select rp.num from room_type rp 要求表1和表2的查询结果结构 ...

  7. vs文件属性(复制到输出目录)是什么意思

    右击项目里的文件,选择属性(F4)会有复制到输出目录的选项. 它提供三项选择,如图: 如果选择始终复制或如果较新则复制会在该程序集的bin目录下生成该文件,如图:

  8. HDU 4268 multiset

    http://acm.hust.edu.cn/vjudge/contest/123100#problem/B #include <iostream> #include <string ...

  9. Backbone事件机制核心源码(仅包含Events、Model模块)

    一.应用场景 为了改善酷版139邮箱的代码结构,引入backbone的事件机制,按照MVC的分层思想搭建酷版云邮局的代码框架.力求在保持酷版轻量级的基础上提高代码的可维护性.   二.遗留问题 1.b ...

  10. C++里创建 Trie字典树(中文词典)(三)(联想)

    萌新做词典第三篇,做得不好,还请指正,谢谢大佬! 今天把词典的联想做好了,也是比较low的,还改了之前的查询.遍历等代码.  Orz 一样地先放上运行结果: test1 ID : char : 件 w ...