其实,也没那么难写

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

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

然后开始分析,对于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. 第九组 通信3班 063 OSPFv2与OSPFv3综合实验

    实验目的 1. 掌握 OSPFv3(v2) 的配置方法 2. 掌握在帧中继环境下 OSPFv3 (v2)的配置方法 3. 掌握 OSPFv3(v2) NSSA 的配置方法 4. 掌握外部路由汇总的配置 ...

  2. SQL Server权限设置

    常用的几个系统表:(其实是View) sysdatabases,主数据库,服务器上的数据库 sysobjects,每个数据库,所有数据库对象 syscolumns,每个数据库,列 sysprocess ...

  3. Jmeter (二十六)逻辑控制器 之 Module Controller and Include Controller

    Module Controller ---模块控制器 测试计划设置“独立运行没每个线程组” 线程组2中使用Module Controller执行线程组1中的Sampler: 紧接着,将线程组1disa ...

  4. vue中params & query的比较

    共同点: 1.都可以传值 2.在另外一个组件中传递值的时候,都是放在$route中 不同点: 1.传值时候,url的表现不一样 query /orderInfo?xxx=yyy&aaa=bbb ...

  5. Cent OS 6.5 下 Node.js安装

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

  6. 泛型设计<T, PK extends Serializable>

    泛型类和泛型方法的使用 http://www.jb51.net/article/67445.htm http://www.cnblogs.com/iyangyuan/archive/2013/04/0 ...

  7. [FACT_采购信息]增加了延期天数

    [延期天数]是指的采购单上的货品交货日期 减 [厂家来货]单据货品第一次到货日期. [FACT_采购信息] SELECT p.[Purchase_ID] [采购单号ID], p.[Supply_No] ...

  8. Servlet中文件上传的几种方式

    上传文件,因为上传的都是二进制数据,所以在Servlet中就不能直接用request.getParameter();方法进行数据的获取,需要借助第三方jar包对上传的二进制文件进行解析.常用的方式如下 ...

  9. jquery中使用each遍历。

    一直知道each这个方法,但是就是不太明白到底怎么用,今天两个地方都使用了each.真的太高兴了,太有成就感了. 东钿微信平台订单列表页 全部订单之前是按照产调,评估,借款的顺序依次排下来,华总说要按 ...

  10. android dialog style属性设置

    <!--最近做项目,用到alertDialog,用系统自带的style很难看,所以查了资料自己定义了个style. res/value/style.xml内增加以下代码:--> <s ...