题目链接

完全模拟

1.模拟结果

当我们的模拟程序执行结束时,直接执行模拟结果函数,用于比对我们的结果和数据给出的结果。

 bool yes(char a[],char b[])
{
for(int i=;i<=;++i)
if(a[i]!=b[i])
return ;
return ;
}
void print()
{
memset(o,,sizeof(o));
if((no1==&&mk==)||(mk==)){o[]='O';o[]='(';o[]='';o[]=')';}
else
{
int mi1,mi10=;
mi1=mk%;
if(mk>=)
{mi10=mk/;o[]='O';o[]='(';o[]='n';o[]='^';o[]=mi10+'';o[]=mi1+'';o[]=')';}
else
{o[]='O';o[]='(';o[]='n';o[]='^';o[]=mi1+'';o[]=')';}
}
if(error){cout<<"ERR"<<endl;return;}
if(yes(o,ok)){cout<<"Yes"<<endl;}
else{cout<<"No"<<endl;}
}

其中mi1储存的是时间复杂度

o是我们结果的模拟,模拟出o(mi1)

ok是数据输入的时间复杂度

2.模拟读入过程

 void F(char,int,int,bool);
void read()
{
char ii,xx[],yy[];
memset(xx,,sizeof(xx));
memset(yy,,sizeof(yy));
cin>>ii>>xx>>yy;
int x,y;
int lenx=strlen(xx);
int leny=strlen(yy);
if(xx[]=='n'&&yy[]!='n')
{
x=;
if(leny==)y=(yy[]-'')*+(yy[]-'');
else y=(yy[]-'');
F(ii,x,y,);
}
else if(xx[]!='n'&&yy[]=='n')
{
if(lenx==)x=(xx[]-'')*+(xx[]-'');
else x=(xx[]-'');
y=;
F(ii,x,y,);
}
else
{
if(leny==)y=(yy[]-'')*+(yy[]-'');
else y=(yy[]-'');
if(lenx==)x=(xx[]-'')*+(xx[]-'');
else x=(xx[]-'');
F(ii,x,y,);
no1=;
} }

运用递归方法,对于输入的 F i j x只有三种情况。

(1) F i n x

时间复杂度要乘以n,所以直接模拟

(2) F n j x

由于n>j,之后的循环嵌套其实进不去,接下来要模拟一个上锁的过程

(3) F i j x

常数级

3.模拟程序执行过程

 int main()
{
cin>>t;
for(int i=;i<=t;++i)
{
mk=;m=;fm=;error=;no1=;unlock=;
memset(ok,,sizeof(ok));
marki.erase(marki.begin(),marki.end());
cin>>l;
cin>>ok;
while(l!=)
{
mi=;
unlock=;
cin>>ht;
if(ht=='F')
{
read();
}
else if(ht=='E')
{
error=;
l--;
}
}
if(fm!=)
{
error=;
}
print(); }
return ;
}

主函数中输入过程每一个小程序都输入一遍

用一个map来存变量x的使用情况

当判到F时进行读入,在F()函数中会判E

所以在主函数中当判到E时直接跳error,一定要记得l--

 void F(char i,int x,int y,bool o1)
{
if(l==)
{
error=;
}l--; if(marki[i]==)
{
error=;
}
marki[i]=;
if(fm!=&&fm==mi)
{unlock=;}
if(o1!=){m++;}fm++; if(x>y)
{unlock=;}
if(unlock)mi=max(m,mi);
while(l!=)
{
cin>>ht;
if(ht=='F')
{
read();
}
else if(ht=='E')
{
l--;
if(o1!=)
{
m--;
}
fm--;
if(m==)
{
mk=max(mi,mk);
mi=;
}
marki.erase(i);
return;
}
}
}

其中的error就是各个错误过程,用了一个unlock去锁住进不去的循环

用了m去存实际除去进入循环的层数,用mi去每次取出

用了fm去存包括进不去的循环在内的层数

当fm回到锁前的mi时解锁

完整代码

 #include<iostream>
#include<cstdio>
#include<map>
#include<stack>
#include<cstring>
using namespace std;
map<char,bool>marki;
bool error;
int m,fm;
int mi,mk;
bool no1;
char o[];
char ok[];
int t,l;
char ht;
char I;
int X,Y;
bool unlock;
bool yes(char a[],char b[])
{
for(int i=;i<=;++i)
if(a[i]!=b[i])
return ;
return ;
}
void F(char,int,int,bool);
void read()
{
char ii,xx[],yy[];
memset(xx,,sizeof(xx));
memset(yy,,sizeof(yy));
cin>>ii>>xx>>yy;
int x,y;
int lenx=strlen(xx);
int leny=strlen(yy);
if(xx[]=='n'&&yy[]!='n')
{
x=;
if(leny==)y=(yy[]-'')*+(yy[]-'');
else y=(yy[]-'');
F(ii,x,y,);
}
else if(xx[]!='n'&&yy[]=='n')
{
if(lenx==)x=(xx[]-'')*+(xx[]-'');
else x=(xx[]-'');
y=;
F(ii,x,y,);
}
else
{
if(leny==)y=(yy[]-'')*+(yy[]-'');
else y=(yy[]-'');
if(lenx==)x=(xx[]-'')*+(xx[]-'');
else x=(xx[]-'');
F(ii,x,y,);
no1=;
} }
void F(char i,int x,int y,bool o1)
{
if(l==)
{
error=;
}l--; if(marki[i]==)
{
error=;
}
marki[i]=;
if(fm!=&&fm==mi)
{unlock=;}
if(o1!=){m++;}fm++; if(x>y)
{unlock=;}
if(unlock)mi=max(m,mi);
while(l!=)
{
cin>>ht;
if(ht=='F')
{
read();
}
else if(ht=='E')
{
l--;
if(o1!=)
{
m--;
}
fm--;
if(m==)
{
mk=max(mi,mk);
mi=;
}
marki.erase(i);
return;
}
}
}
void print()
{
memset(o,,sizeof(o));
if((no1==&&mk==)||(mk==)){o[]='O';o[]='(';o[]='';o[]=')';}
else
{
int mi1,mi10=;
mi1=mk%;
if(mk>=)
{mi10=mk/;o[]='O';o[]='(';o[]='n';o[]='^';o[]=mi10+'';o[]=mi1+'';o[]=')';}
else
{o[]='O';o[]='(';o[]='n';o[]='^';o[]=mi1+'';o[]=')';}
}
if(error){cout<<"ERR"<<endl;return;}
if(yes(o,ok)){cout<<"Yes"<<endl;}
else{cout<<"No"<<endl;}
}
int main()
{
cin>>t;
for(int i=;i<=t;++i)
{
mk=;m=;fm=;error=;no1=;unlock=;
memset(ok,,sizeof(ok));
marki.erase(marki.begin(),marki.end());
cin>>l;
cin>>ok;
while(l!=)
{
mi=;
unlock=;
cin>>ht;
if(ht=='F')
{
read();
}
else if(ht=='E')
{
error=;
l--;
}
}
if(fm!=)
{
error=;
}
print(); }
return ;
}

Code

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

  1. NOIP2017 时间复杂度 大模拟

    再写一道大模拟题. 由于是限时写的,相当于考场代码,乱的一批. 题目链接:P3952 时间复杂度 先记几个教训: 字符串形式的数字比较大小老老实实写函数,字典序都搞错几次了 栈空的时候不但pop()会 ...

  2. 2018.11.02 洛谷P3952 时间复杂度(模拟)

    传送门 惊叹考场dubuffdubuffdubuff. 这题还没有梭哈难啊233. 直接按照题意模拟就行了. 代码: #include<bits/stdc++.h> using names ...

  3. 洛谷 P3952 时间复杂度【模拟】

    把No写成NO,WA了一发-- 现在看这题也不难-- 用一个栈,记一下前面F的字母,是否合法,合法的有多长,每次入栈弹栈即可 #include<iostream> #include< ...

  4. 【题解】洛谷P3952 [NOIP2017TG] 时间复杂度(模拟)

    题目来源:洛谷P3952 思路 纯模拟没啥可说的了 果然好复杂 参考了你谷一个40行代码 代码 #include<iostream> #include<cstdio> #inc ...

  5. luogu P3952 时间复杂度 模拟

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

  6. 计蒜客 时间复杂度 (模拟) & 洛谷 P3952 时间复杂度

    链接 : Here! 思路 : 这是一道大模拟, 区分好情况就没问题了 循环构成部分 : $F , x , i , j$ 和 $E$ , 需要注意的是 $i , j$, - 分析 $i, j$ 的情况 ...

  7. Bzoj1972: [Sdoi2010]猪国杀 题解(大模拟+耐心+细心)

    猪国杀 - 可读版本 https://mubu.com/doc/2707815814591da4 题目可真长,读题都要一个小时. 这道题很多人都说不可做,耗时间,代码量大,于是,本着不做死就不会死的精 ...

  8. [CSP-S模拟测试]:引子(大模拟)

    题目描述 网上冲浪时,$Slavko$被冲到了水箱里,水箱由上而下竖直平面.示意图如下: 数字$i$所在的矩形代表一个编号为$i$的水箱.1号水箱为水箱中枢,有水管连出.除了$1$号水箱外,其他水箱上 ...

  9. HDU 5920 Ugly Problem 高精度减法大模拟 ---2016CCPC长春区域现场赛

    题目链接 题意:给定一个很大的数,把他们分为数个回文数的和,分的个数不超过50个,输出个数并输出每个数,special judge. 题解:现场赛的时候很快想出来了思路,把这个数从中间分为两部分,当位 ...

随机推荐

  1. 2018-2019-2 网络对抗技术 20165335 Exp3 免杀原理与实践

    一.免杀原理与基础知识: (1)杀软是如何检测出恶意代码的? 检测特征码:特征码就是一般程序都不会有的代码,而后门有的那种特别的数据,而一个程序,应用有这种代码,数据的话,就直接判定为恶意代码. 主流 ...

  2. ACTIVEMQ 实例化到MSSQL

    实例化文章很多,不重复,自行查询 直接上XML <!-- Licensed to the Apache Software Foundation (ASF) under one or more c ...

  3. composer安装doctrine/dbal

    composer安装doctrine/dbal composer安装doctrine/dbal,安装不成功,使用的安装命令为官方提供命令“composer require doctrine/dbal” ...

  4. [Python数据挖掘]第7章、航空公司客户价值分析

    一.背景和挖掘目标 二.分析方法与过程 客户价值识别最常用的是RFM模型(最近消费时间间隔Recency,消费频率Frequency,消费金额Monetary) 1.EDA(探索性数据分析) #对数据 ...

  5. Summary on deep learning framework --- TensorFlow

     Summary on deep learning framework --- TensorFlow Updated on 2018-07-22 21:28:11 1. Check failed: s ...

  6. 【SSL Certificates】什么是数字证书(Certificates)?

    本文涉及的相关问题,如果你的问题或需求有与下面所述相似之处,请阅读本文 ssl certificate 什么是ssl certificates? SSL Certificates 是一种使用数字加密技 ...

  7. hadoop配置项笔记 - yarn

    hadoop版本:3.1.1 yarn-site.xml yarn.log-aggregation-enable 作用:是否开启任务日志收集 默认值:false 我的设置:true yarn.log- ...

  8. ACM:日历本

    题目描述 我们经常需要使用日历,所以需要一个能生成日历的程序. 先要求你写一个程序,只需要输入年份,就能生成正确的日历. 输入 输入包含多组测试数据.每组输入一个整数Y(1800<=Y<= ...

  9. Pandas 基础(16) - Holidays

    这节依然是关于时间方面的知识.上一节学习了如何获取日期序列的函数, 以及通过一些基本的参数设置可以使时间序列跳过休息日等.这一节, 将要深入学习这个点, 做更自定义的设计. 通过上一节的学习, 我们知 ...

  10. laravel 框架的 csrf

    由于 laravel 框架自带 csrf 防护, 也就是通过中间件验证请求的 token, 所以 form 表单必须如下设置才可以正常提交, 否则会 419: <form method=&quo ...