题目链接

完全模拟

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. 信步漫谈之Jenkins—集成自动化部署 SVN 项目

    一.环境准备 1)Jenkins 部署 WAR 包:jenkins.war(2.164.2 版本,WAR 包官方下载路径:https://jenkins.io/download/)2)Tomcat 服 ...

  2. python selenium web自动化测试完整项目实例

    问题: 好多想不到的地方,中间经历了一次重构,好蛋疼: xpath定位使用的不够熟练,好多定位问题,只能靠强制等待解决: 存在功能重复的方法,因为xpath定位不同,只能分开写,有时间可以继续优化: ...

  3. 【转】LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

    用VS2010编译C++项目时出现这样的错误: LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 方案一:(这个方法比较好,在用qt运行时出现问题也能解决) 复制 C:\Windows\ ...

  4. CSS——div垂直居中及div内文字垂直居中

    最近做demo时,经常需要div垂直居中或者让div内文字相对div垂直居中.水平居中比较简单,就不多说了,这里主要记录一下垂直居中的一些方法. 一.div垂直居中的一些方法: 1.当height.w ...

  5. ASCII对应码表-键值(完整版)

    ASCII对应码表-键值(完整版) Bin (二进制) Oct (八进制) Dec (十进制) Hex (十六进制) 缩写/字符 解释 0000 0000 00 0 0x00 NUL(null) 空字 ...

  6. kubernets kubevirt 分析

    目前kubevirt提供虚机管理的功能. kill, delete, shutdown, migration 等. VMI是virtual machine interface的缩写. SyncVMI, ...

  7. Undefined、Null区别渗透

    Undefined 类型表示未定义,它的类型只有一个值,就是 undefined.任何变量在赋值前是 Undefined 类型.值为 undefined,一般我们可以用全局变量 undefined(就 ...

  8. 原生JS实现轮播效果

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. 四、Python数据类型(二)

    一.布尔(Boolean) 布尔类型的数据只有两个:(真)True和(假)False.多用于条件语句或者是作为函数返回值. 二.字典(dictionary) 1.认识字典 将数据组织成键值对(key- ...

  10. _spellmod_aura_on_classmask

    -- 修改职业所有技能,公共冷却时间.冷却时间等--小技巧: 根据职业107,108来修改(近期会有改动) `aura` 技能光环ID `spellfamily` 职业代码 `type1` 百分比还是 ...