题目链接

完全模拟

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. -bash: belts.awk: command not found

    执行awk命令时,没有问题.可是执行awk脚本时,出现这个问题:-bash: belts.awk: command not found. 既然之前直接执行awk命令没有问题,说明awk已经装了,本身是 ...

  2. centos安装图形界面

    1.首先安装X(X Window System),命令为  yum groupinstall "X Window System"   回车 2.由于这个软件组比较大,安装过程会比较 ...

  3. 【annotation】非人类物种基因组注释(MSU为例)

    基因组注释工具ANNOVAR是一款非常好用的注释软件,功能强大,输出数据简单美中不足就是对于非人类物种来说UI不够完善,因此总结一下整个注释的过程,帮助别人快乐自己. 首先我们需要明确我们需要的数据和 ...

  4. bui前端框架+yii整理

    这个是做bui前端样式整合的时候记录的. 首先当然是要下载一个yii的源码,搭建起来. 第一步将bui的样式迁移到yii的样式目录中去 这里我在样式外面加了一个bui的文件夹,表示这个文件夹中存放的是 ...

  5. Invalid bound statement (not found):xxx错误的可能原因

    1,报错信息 log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvir ...

  6. open-falcon部署v0.2.1版本

    环境准备 安装redis yum install redis -y systemctl start redis 安装mysql rpm -ivh http://dev.mysql.com/get/my ...

  7. loj 6008 餐巾计划 - 费用流

    题目传送门 传送门 题目大意 (经典题还不知道题意?) 容易想到需要把未使用的餐巾和已经使用的餐巾分开. 设$X_i$表示第$i$天已经的使用餐巾的点,设$Y_i$表示第$i$天还未使用的餐巾的点 我 ...

  8. web性能测试

    在公司Confluence上看到一篇好文,原链接已不能访问.先收藏 转帖自:http://blog.csdn.net/wxq8102/article/details/1735726 1.1基本概念并发 ...

  9. Appium+python 使用 press_keycode 如何输入大写字母

    背景:在做自动化测试项目时,需要在文本框中输入一串数字和字母组合的字符串(注:此页面为webview无法使用send_keys方法) 要使用send_keys方法首先要知道键盘字符对应的数值,这个可以 ...

  10. python第一天2.28

    2019年2月28日 今日内容大纲: 01 cpu 内存 硬盘 操作系统 CPU:中央处理器,相当于人大脑.   运行速度:飞机 内存:临时存储数据. 8g,16g,      运行速度:高铁 1,成 ...