其实,也没那么难写

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

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

然后开始分析,对于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. python爬虫——web前端基础(4)

    CSS,指层叠样式表,用来定义如何显示HTML元素,一般和HTML配合使用. 在HTML中使用CSS样式的方法: 内联样式表:CSS代码直接写在现有的HTML标记中,直接使用style属性改变样式.例 ...

  2. 界面切换动画(CATransition实现 )

    调用 // CATransition动画实现 [self pushWithAnimationType:@"fade"]; - (void)pushWithAnimationType ...

  3. 封装了一个电商放大镜移入放大的功能,适用于VUE

    代码地址:https://github.com/zhongqiulan/jqimgzoom 由于vue只支持ie9以上版本,所以这个插件也是一样的 效果图: 第一步,在goodsinfo文件中引入cs ...

  4. Cent OS 6.5 下 Node.js安装

    打开官网 http://nodejs.org/ 点击那个绿色的INSTALL 按钮下载安装包,然后解压.   基本的环境我原本已经安装完毕,这是需求的环境,来源安装包中的README.md,需要的自行 ...

  5. css中如何设置透明度

    怎样在CSS样式中设置背景的透明度,下面一个具体的实例.把类为box的层设为透明.<div class="box"></div><style>. ...

  6. spoolight on oracle 配置

    spoolight seting 1ORACLE_HOME=D:\oracle\product\11.2.0\client_1set SQLPATH=D:\oracle\product\11.2.0\ ...

  7. LWIP学习之流程架构

    一 STM32F107的网络接口配置:#include "stm32_eth.h" 1.1 打开网口时钟,响应IO配置.NVIC中断:通过调用Ethernet_Configurat ...

  8. mysql非常全的和完整的总结

    (1)数据类型 类型 备注 tinyint/smallint/mediumint/int/bigint 1B/2B/3B/4B/8B float/double 单精度/双精度浮点型 decimal 不 ...

  9. [USACO07JAN]平衡的阵容Balanced Lineup

    [USACO07JAN]平衡的阵容Balanced Lineup 题目描述 For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) a ...

  10. windows live writer 安装失败 0x80190194 解决方法

    windows live writer已经停止更新,部分安装包无法下载. 改安装windows软件包即可,其中包含windows live writer的安装. 参考: http://jingyan. ...