题目来源:洛谷P3952

思路

纯模拟没啥可说的了

果然好复杂

参考了你谷一个40行代码

代码

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int T,tot,num,Max,stand,now,k,n,cnt;
int member[],what[];
bool vis[];
//tot是有几个句子,stand是题目给的复杂度是多少
//now是当前在几重循环,vis[]是判断变量是否使用过
//member[]是存下每个循环的变量,tot是当前复杂度是多少(与now不同)
//k是判断下面程序是否进行,what[]是存下哪几个循环加了复杂度
//m是当前最大复杂度,n是存下k=1时的循环数
//T是数据组数
string a,b;//循环使用
int main()
{
cin>>T;
while(T--)
{
Max=stand=tot=num=now=k=n=cnt=;
memset(vis,,sizeof(vis));
memset(what,,sizeof(what));
do
{
a=b;//记录一共有几行
cin>>b;
}
while(b[]!='O');//当读入到O时停止一次
for(int i=;i<a.length();i++) cnt=cnt*+a[i]-'';//计算有几行
for(int i=;i<b.length()-;i++) stand=stand*+b[i]-'';//计算是n的几次方 如果是O(1)不影响 存成0
while(cnt--)
{
cin>>a;//输入第一个字符
if(a[]=='F')
{
now++;//循环次数增加
cin>>a;//输入变量
if(vis[a[]-]) now=-;//如果此变量已经用过 说明语法错误
else
{
vis[a[]-]=;
member[now]=a[]-;//记录在此次循环用了这个变量
}
cin>>a>>b;//输入变量后面的两个数
if((a[]!='n')&&(b[]=='n')&&(!k))//如果前面是数字后面是n 且可以运行的话
{
tot++;//可行循环+1
what[now]=;//此循环有计算
}
else if(((a.length()==b.length()&&a>b)||(a.length()>b.length())||(a[]=='n'&&b[]!='n'))&&(!k))
{
//如果a>b(n 4,45 12,24 9) 而且可以运行 那么标记下面的都不能运行 记下当前循环
//像5 8,76 78, n n 之类的不影响,不需要处理
k=;
n=now;
}
}
else//跳出循环
{
Max=max(Max,tot);//计算最大的循环次数
vis[member[now]]=;//此变量被删去
if(what[now]==)//如果此循环内增加了复杂度
{
what[now]=;//清空标记
tot--;//当前复杂度还原
}
now--;//总循环还原
if(n>&&now<n)//如果此时跳出了被n标记的循环 即不进行的循环 就把标记清楚 接下来的循环可以进行
{
k=;
n=;
}
}
if(now==-)//如果e<0(变量用过或者E过多),那么输出ERR,跳出循环
{
cout<<"ERR"<<endl;
break;
}
}
if(now>) cout<<"ERR"<<endl;//如果e>0(F过量),那么输出ERR,跳出循环
if(now==&&stand==Max) cout<<"Yes"<<endl;//如果F,E相同而且最大复杂度等于题目给的复杂度,输出Yes
if(now==&&stand!=Max) cout<<"No"<<endl;//如果F,E相同而且最大复杂度不等于题目给的复杂度,输出No
}
}

【题解】洛谷P3952 [NOIP2017TG] 时间复杂度(模拟)的更多相关文章

  1. 【题解】洛谷P3953 [NOIP2017TG] 逛公园(记忆化搜索+SPFA)

    题目来源:洛谷P3953 思路 先用SPFA求一遍最短路 在求最短路的同时可以把所有点到终点的最短路求出来 dis数组 注意要反向SPFA  因为从起点开始可能会走到一些奇怪的路上导致时间负责度增加 ...

  2. 【题解】洛谷P3959 [NOIP2017TG] 宝藏(状压DP+DFS)

    洛谷P3959:https://www.luogu.org/problemnew/show/P3959 前言 NOIP2017时还很弱(现在也很弱 看出来是DP 但是并不会状压DP 现在看来思路并不复 ...

  3. 题解 洛谷 P3396 【哈希冲突】(根号分治)

    根号分治 前言 本题是一道讲解根号分治思想的论文题(然鹅我并没有找到论文),正 如论文中所说,根号算法--不仅是分块,根号分治利用的思想和分块像 似却又不同,某一篇洛谷日报中说过,分块算法实质上是一种 ...

  4. 题解-洛谷P5410 【模板】扩展 KMP(Z 函数)

    题面 洛谷P5410 [模板]扩展 KMP(Z 函数) 给定两个字符串 \(a,b\),要求出两个数组:\(b\) 的 \(z\) 函数数组 \(z\).\(b\) 与 \(a\) 的每一个后缀的 L ...

  5. 题解-洛谷P4229 某位歌姬的故事

    题面 洛谷P4229 某位歌姬的故事 \(T\) 组测试数据.有 \(n\) 个音节,每个音节 \(h_i\in[1,A]\),还有 \(m\) 个限制 \((l_i,r_i,g_i)\) 表示 \( ...

  6. 题解-洛谷P4724 【模板】三维凸包

    洛谷P4724 [模板]三维凸包 给出空间中 \(n\) 个点 \(p_i\),求凸包表面积. 数据范围:\(1\le n\le 2000\). 这篇题解因为是世界上最逊的人写的,所以也会有求凸包体积 ...

  7. 题解-洛谷P4859 已经没有什么好害怕的了

    洛谷P4859 已经没有什么好害怕的了 给定 \(n\) 和 \(k\),\(n\) 个糖果能量 \(a_i\) 和 \(n\) 个药片能量 \(b_i\),每个 \(a_i\) 和 \(b_i\) ...

  8. 题解 洛谷 P2010 【回文日期】

    By:Soroak 洛谷博客 知识点:模拟+暴力枚举 思路:题目中有提到闰年然后很多人就认为,闰年是需要判断的其实,含有2月29号的回文串,前四位是一个闰年那么我们就可以直接进行暴力枚举 一些小细节: ...

  9. 题解 洛谷P5018【对称二叉树】(noip2018T4)

    \(noip2018\) \(T4\)题解 其实呢,我是觉得这题比\(T3\)水到不知道哪里去了 毕竟我比较菜,不大会\(dp\) 好了开始讲正事 这题其实考察的其实就是选手对D(大)F(法)S(师) ...

随机推荐

  1. MySQL批量插入多条数据方便测试

    批量插入流程 数据库字段 delimiter create procedure doinsert3() begin declare i int; declare j int; ; ; ) do ins ...

  2. IntelliJ IDEA 快捷键(二)(window版)

    一.重构 1.重构变量 修改变量名称,即重命名.快捷键 Shift + F6 ,位于 Refactor 中. 2.重构方法 可以增加变量个数.快捷键 Ctrl + F6 ,位于 Refactor 中. ...

  3. 学会Markdown,写博客不愁

    前言 Markdown是一种轻量级的标记语言,有John Gruber以及Aaron Hillel Swartz一起编写.Aaron Hillel Swartz是一个极富传奇的黑客,有兴趣可以看看他的 ...

  4. javaweb中带标签体的自定义标签

    1.完整的示例代码: 标签体的处理器类,JspFragmentTest.java package com.javaweb.tag; import java.io.IOException; import ...

  5. Mac下使用Parallels Desktop安装CentOS操作系统

    Mac下安装Centos后,Mac和Centos之间默认是不通的,需要做下面一些设置后,才能互相共享. 启用网络设置 默认的网络设置是没有enable的,因此,在安装完之后需要开启的话,需要保证开启& ...

  6. wamp配置步骤

    对于初做PHP网站的朋友来说,第一步肯定是希望在自己电脑是搭建PHP环境,省去空间和上传的麻烦!但搭建环境也不是件容易的事情,特别是对于新手同学来说!因此在这里跟大家介绍我作为一名新手在使用的方便好用 ...

  7. 动态赋值poster,无法显示

    vue操作video的poster属性时,动态给poster赋值,在chrome下是无法显示的 解决办法 在赋值后,找到video元素.load()下就会看到封面图了

  8. <Android Framework 之路>BootAnimation(2)

    前言 上一篇主要讲解了BootAnimation是从何而来,如何启动,从开机,到SurfaceFlinger服务起来,然后到执行开机动画,如果要深入的看里面的代码,是需要花一定的时间的,我们旨在了解大 ...

  9. 讲解JavaScript两个圆括号、自调用和闭包函数

    一.JavaSript圆括号的使用 先来看一组通过函数声明来定义的函数: 先附代码: 运行结果如下: 这里我们可以看出: Ø  若没有加圆括号,则返回的是这个函数的内容 Ø  若加上圆括号,则返回的是 ...

  10. Docker常用操作指令

    1.查看正在运行的容器 docker ps 2.查看所有容器 docker ps -a 3.停用所有正在运行的容器 docker stop $(docker ps -q) 4.删除所有容器 docke ...