其实,也没那么难写

这种模拟题,仔细分析一下输入格式,分析可能的情况,把思路写在纸上,逐步求精,注意代码实现

主要思路就是算一个时间复杂度,和给出的复杂度比较,这就先设计一个函数把给出的复杂度由字符串形式化为数字形式

然后开始分析,对于F:

  1. 检查变量合法
  2. 分类:常量-常量和n-n:O(1),常量-n:O(n),n-常量:无法进入,记为0,特殊标记一个slay

    3.压栈:栈内记录变量名和贡献的复杂度,用map标记变量为使用过

    对于E:
  3. 检查栈空
  4. 如果没有slay标记就更新答案
  5. 弹栈,清空变量使用

一个问题:ERR不能直接返回,剩下的程序还是要读完的

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<map>
using namespace std; int n;
string ostring; struct Node{
string var;
int o,slay;
Node(string s="",int _=0,int l=0){var=s;o=_;slay=l;}
}; int ans,cur;
Node sta[10000];
int top;
map<string,int> mp;
int checkO(string s){//return the O of s
if(s=="O(1)") return 0;
int ret=0,p=0;char c;
while(c=s[p++],!isdigit(c));
while(isdigit(c)){
ret=ret*10+c-'0';
c=s[p++];
}
return ret;
} int push(string var,string st,string ed){
if(mp[var]==1)return -1; mp[var]=1;
if(st=="n"&&ed=="n") return 0;
if(st=="n") return -2;//slay =1
if(ed=="n") return 1;
int l=0,r=0;
int len=st.size();
for(int i=0;i<len;i++){
l*=10;
l+=st[i]-'0';
}
len=ed.size();
for(int i=0;i<len;i++){
r*=10;
r+=ed[i]-'0';
}
if(l<=r) return 0;
else return -2;
} int pop(){
if(!top) return -1;
Node tmp=sta[top--];
mp[tmp.var]=0;
if(!tmp.slay) ans=max(ans,cur);
cur-=tmp.o;
} int solve(int len){
int fail=0;
ans=0;cur=0;top=0;mp.clear();
int tmp=0,sl=0;
string s,var,st,ed;
for(int i=1;i<=len;i++){
sl=0;
cin>>s;
if(s=="F"){
cin>>var>>st>>ed;
tmp=push(var,st,ed);
if(tmp==-1) fail=1;
if(tmp==-2) sl=1,tmp=0;
if(top>0) sl|=sta[top].slay;
sta[++top]=Node(var,tmp,sl);
cur+=tmp;
}else{
tmp=pop();
if(tmp==-1) fail=1;
}
}
if(top) return -1;
if(fail) return -1;
return ans;
} int main(){
int T;
cin>>T;
while(T--){
top=0;ans=0;cur=0;
cin>>n>>ostring;
int aim=checkO(ostring);
int res=solve(n);
if(res==-1) {puts("ERR");continue;}
if(aim==res) {puts("Yes");continue;}
puts("No");
}
return 0;
}

[LUOGU] P3952 时间复杂度的更多相关文章

  1. luogu P3952 时间复杂度 模拟

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

  2. 【luogu P3952 时间复杂度】 题解

    对于2017 D1 T2 这道题 实实在在是个码力题,非常考验耐心. 其实大体的思路并不是非常难想出来,但是要注意的小细节比较多. 题目链接:https://www.luogu.org/problem ...

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

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

  4. P3952 时间复杂度

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

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

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

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

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

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

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

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

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

  9. 洛谷P3952 时间复杂度

    大毒瘤...... 时隔快半年我终于花了两个小时堪堪A掉这一题...果然我还没有准备好. 想法:用DFS模拟递归. 时间复杂度的处理:每层循环取max,然后相加. 最大难点:各种繁杂而令人发指的特判. ...

随机推荐

  1. Nacos深入浅出(三)

    EventDispatcher.fireEvent(new ConfigDataChangeEvent(true, dataId, group, tenant, time.getTime())); 跟 ...

  2. java 性能调优和GC

    JAVA 性能调优和GC http://blog.csdn.net/gzh0222/article/details/7663181 JAVA GC调优手记 http://blog.csdn.net/f ...

  3. Maven对坐标的管理 自动导入传递依赖 坐标和传递依赖分级显示

  4. BZOJ 1433 && Luogu P2055 [ZJOI2009]假期的宿舍 匈牙利算法

    刚学了匈牙利正好练练手(我不会说一开始我写错了)(怕不是寒假就讲了可是我不会) 把人看做左部点,床看作右部点 建图:(!!在校相当于有床,不在校相当于没有床 但是要来学校) 1.在校的 不走的人 自己 ...

  5. 30道python真实面试题(搜集到的,看看其实都是基础)

    1.一行代码实现1-100之间和 In [1]: sum(range(0,101)) Out[1]: 5050 2.如何在一个函数内部修改全局变量 利用global修改全局变量 In [2]: a = ...

  6. Linux上常用命令整理(一)—— cat

    近几个月刚从windows上转过来,开始慢慢熟悉linux,先不撕比到底哪个更好,首先要怀着相互借鉴的精神去了解各个平台. Linux上做开发,除去使用文本编辑器做开发的大神之外,大家(包括我这种菜鸟 ...

  7. 关于Nginx对于PHP支持的问题

    因为使用的mediawiki是用php写的,所以就遇上了一个问题,怎么让Nginx支持php,记得当时使用apache2的时候是安装了一个叫 “ libapache2-mod-php5 ”的mod , ...

  8. 修改Tomcat和Jetty默认JDK

    tomcat: sed -i 's/java-7-oracle/java-8-oracle/g' /etc/init.d/tomcat7 Jetty echo 'JAVA_HOME=/usr/lib/ ...

  9. RTX51 Tiny

    参考文档 :RTX51 Tiny 2.02 中文手册.doc.Keil_Rtx51_tiny_RTOS中文版.pdf RTX-51 有 2 个版本:Full 和 Tiny.类似的国人写的 Small ...

  10. [WPF自定义控件库]了解如何自定义ItemsControl

    1. 前言 对WPF来说ContentControl和ItemsControl是最重要的两个控件. 顾名思义,ItemsControl表示可用于呈现一组Item的控件.大部分时候我们并不需要自定义It ...