【 P3952】 时间复杂度 大模拟题解
完全模拟
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】 时间复杂度 大模拟题解的更多相关文章
- NOIP2017 时间复杂度 大模拟
再写一道大模拟题. 由于是限时写的,相当于考场代码,乱的一批. 题目链接:P3952 时间复杂度 先记几个教训: 字符串形式的数字比较大小老老实实写函数,字典序都搞错几次了 栈空的时候不但pop()会 ...
- 2018.11.02 洛谷P3952 时间复杂度(模拟)
传送门 惊叹考场dubuffdubuffdubuff. 这题还没有梭哈难啊233. 直接按照题意模拟就行了. 代码: #include<bits/stdc++.h> using names ...
- 洛谷 P3952 时间复杂度【模拟】
把No写成NO,WA了一发-- 现在看这题也不难-- 用一个栈,记一下前面F的字母,是否合法,合法的有多长,每次入栈弹栈即可 #include<iostream> #include< ...
- 【题解】洛谷P3952 [NOIP2017TG] 时间复杂度(模拟)
题目来源:洛谷P3952 思路 纯模拟没啥可说的了 果然好复杂 参考了你谷一个40行代码 代码 #include<iostream> #include<cstdio> #inc ...
- luogu P3952 时间复杂度 模拟
题目链接 luogu P3952 时间复杂度 题解 直接模拟即可 注意不要直接return 我真是naive ...... 代码 #include<map> #include<sta ...
- 计蒜客 时间复杂度 (模拟) & 洛谷 P3952 时间复杂度
链接 : Here! 思路 : 这是一道大模拟, 区分好情况就没问题了 循环构成部分 : $F , x , i , j$ 和 $E$ , 需要注意的是 $i , j$, - 分析 $i, j$ 的情况 ...
- Bzoj1972: [Sdoi2010]猪国杀 题解(大模拟+耐心+细心)
猪国杀 - 可读版本 https://mubu.com/doc/2707815814591da4 题目可真长,读题都要一个小时. 这道题很多人都说不可做,耗时间,代码量大,于是,本着不做死就不会死的精 ...
- [CSP-S模拟测试]:引子(大模拟)
题目描述 网上冲浪时,$Slavko$被冲到了水箱里,水箱由上而下竖直平面.示意图如下: 数字$i$所在的矩形代表一个编号为$i$的水箱.1号水箱为水箱中枢,有水管连出.除了$1$号水箱外,其他水箱上 ...
- HDU 5920 Ugly Problem 高精度减法大模拟 ---2016CCPC长春区域现场赛
题目链接 题意:给定一个很大的数,把他们分为数个回文数的和,分的个数不超过50个,输出个数并输出每个数,special judge. 题解:现场赛的时候很快想出来了思路,把这个数从中间分为两部分,当位 ...
随机推荐
- java线程学习之notify方法和notifyAll方法
notify(通知)方法,会将等待队列中的一个线程取出.比如obj.notify();那么obj的等待队列中就会有一个线程选中并且唤醒,然后被唤醒的队列就会退出等待队列.活跃线程调用等待队列中的线程时 ...
- java反射之获取所有方法及其注解(包括实现的接口上的注解),获取各种标识符备忘
java反射之获取类或接口上的所有方法及其注解(包括实现的接口上的注解) /** * 获取类或接口上的所有方法及方法上的注解(包括方法实现上的注解以及接口上的注解),最完整的工具类,没有现成的工具类 ...
- 什么是事务?事务特性?事务隔离级别?spring事务传播特性?
一.事务的概述 什么是事务? 在数据库中,所谓事务是指一组逻辑操作单元即一组sql语句,当这个单元中的一部分操作失败,整个事务回滚,只有全部正确才完成提交.判断事务是否配置成功的关键点在于出现异常时事 ...
- Leaflet获取可视范围内4个顶点
//地图级别改变时发生 map.on("zoomend", function (e) { var zoom_val = e.target.getZoom(); map_drag() ...
- 用PIL库进行图像处理
一.如果系统里没有安装PIL库的,请先到命令提示符输入“pip install pillow”进行安装 二.之后就可以参考以下的代码 from PIL import Image from pylab ...
- [pycocotools修改]cocoeval.py
__author__ = 'tsungyi' import numpy as np import datetime import time from collections import defaul ...
- linux准备工具VMware以及ubuntu
链接:https://pan.baidu.com/s/1j7DZCmzOcC2rPAciHtZgkA 密码:et5s
- day19
""" time 用于处理时间相关 1.获取时间 2.不同格式的时间转换 3.sleep函数"""import time# 浮点型的时间戳 ...
- dom节点相关问题
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- python第一天2.28
2019年2月28日 今日内容大纲: 01 cpu 内存 硬盘 操作系统 CPU:中央处理器,相当于人大脑. 运行速度:飞机 内存:临时存储数据. 8g,16g, 运行速度:高铁 1,成 ...