自认为是少有的复杂的代码

这题思想很简单,就是大模拟

对于for循环,一行读入4个字符串,然后分类讨论:

①:如果是一个正常的O(n),那么累计n的指数加1

②:如果是一个常数级别的,那么继续循环,但是不累计指数

③:如果这个循环是从n到常数,或大常数到小常数,那么这个循环及它内部的循环都不进,打好标记不要累计

④:至于如何防止变量的重复使用:将用过的变量放进栈里并打上标记,循环结束时出栈清标记即可

⑤:还要注意一些小细节:循环层数只计最深的一层,所以我们用一个累计变量cnt,每次结束循环考虑循环的情况:如果这个循环被累计了,cnt--,否则cnt不变,所以我们还要开一个栈,记录每个循环的情况(与存变量的栈同步使用即可)

剩下就好办了:

#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
using namespace std;
char s[];
char s1[],s2[];
char tt[];
bool used[];
int n;
stack <char> Q;
stack <int> M;
int main()
{
scanf("%d",&n);
while(n--)
{
int l;
scanf("%d",&l);
scanf("%s",tt);
int flag=;
int flag0=;
int flag2=;
int cnt=,maxcnt=;
memset(used,,sizeof(used));
while(!M.empty())
{
M.pop();
Q.pop();
}
for(int i=;i<=l;i++)
{
scanf("%s",s);
if(flag0)
{
if(s[]=='F')
{
scanf("%s",s);
scanf("%s",s);
scanf("%s",s);
}
continue;
}
if(s[]=='E')
{
if(!flag)
{
flag0=;
continue;
}else
{
char c=Q.top();
used[c]=;
Q.pop();
flag--;
int y=M.top();
if(y==)
{
cnt--;
}else if(y==)
{
flag2=;
}
M.pop();
}
}else
{
scanf("%s",s);
if(used[s[]])
{
flag=;
scanf("%s",s);
scanf("%s",s);
continue;
}
used[s[]]=;
Q.push(s[]);
scanf("%s",s1);
scanf("%s",s2);
flag++;
if(s1[]-''<=&&s2[]-''<=&&s1[]-''>=&&s2[]-''>=)
{
int j=;
int x=;
while(s1[j]-''<=&&s1[j]-''>=)
{
x=x*+s1[j]-'';
j++;
}
int y=;
j=;
while(s2[j]-''<=&&s2[j]-''>=)
{
y=y*+s2[j]-'';
j++;
}
if(x>y)
{
flag2=;
M.push();
}else
{
M.push();
}
continue;
}else if(s2[]-''<=&&s2[]-''>=)
{
M.push();
flag2=;
continue;
}else
{
if(s2[]=='n'&&s1[]=='n')
{
M.push();
continue;
}
if(!flag2)
{
cnt++;
M.push();
}else
{
M.push();
}
maxcnt=max(maxcnt,cnt);
}
}
}
if(flag)
{
flag0=;
}
if(flag0)
{
printf("ERR\n");
continue;
}else if(maxcnt==&&tt[]=='')
{
printf("Yes\n");
continue;
}else
{
int j=;
int x=;
while(tt[j]-''<=&&tt[j]-''>=)
{
x=x*+tt[j]-'';
j++;
}
if(x==maxcnt)
{
printf("Yes\n");
continue;
}
printf("No\n");
continue;
}
}
return ;
}

noip 2017 时间复杂度的更多相关文章

  1. NOIP 2017 时间复杂度 (模拟)

    题目大意:略 傻了吧唧的我wa了好几次 我的模拟功底真的不咋地 linux下用gets会报错,我用的fgets #include <string> #include "stdio ...

  2. 「NOIP 2017」列队

    题目大意:给定一个 $n times m$ 的方阵,初始时第 $i$ 行第 $j$ 列的人的编号为 $(i-1) times m + j$,$q$ 次给出 $x,y$,让第 $x$ 行 $y$ 列的人 ...

  3. NOIP 2017 解题报告

    ---恢复内容开始--- NOIP 2017 的题真的很难啊,怪不得当年我这个萌新爆零了(当然现在也是萌新)越学越觉得自己什么都不会. 想要成为强者要把这些好题都弄懂弄透 至少现在6道题我都比较陌生 ...

  4. NOIP 2017 列队 - Splay - 树状数组

    题目传送门 传送点I 传送点II 题目大意 (家喻户晓的题目应该不需要大意) (我之前咋把NOIP 2017打成了NOIP 2018,好绝望) Solution 1 Splay 每行一颗Splay,没 ...

  5. 【游记】NOIP 2017

    时间:2017.11.11~2017.11.12 地点:广东省广州市第六中学 Day1 T1:看到题目,心想这种题目也能放在T1? 这个结论我之前遇到过至少3次,自己也简单证明过.初见是NOIP200 ...

  6. NOIP 2017 小凯的疑惑

    # NOIP 2017 小凯的疑惑 思路 a,b 互质 求最大不能表示出来的数k 则k与 a,b 互质 这里有一个结论:(网上有证明)不过我是打表找的规律 若 x,y(设x<y) 互质 则 : ...

  7. 历年真题 未完成(Noip 2008 - Noip 2017)

    Noip 2008 :全部 Noip 2009 :全部 Noip 2010 :AK Noip 2011 :AK Noip 2012 : Vigenère 密码,国王游戏,开车旅行 Noip 2013 ...

  8. 洛谷 P3951 NOIP 2017 小凯的疑惑

    洛谷 P3951 NOIP 2017 小凯的疑惑 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付 ...

  9. NOIP 2017 提高组 day1t2 时间复杂度

    P3952 时间复杂度 标签 NOIp提高组 2017 时空限制 1000ms / 128MB 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂 ...

随机推荐

  1. python字典遍历的几种方法

    (1)遍历key值 >>> a {'} >>> for key in a: print(key+':'+a[key])   a:1 b:2 c:3 >> ...

  2. python爬虫 bs4_4select()教程

    http://www.w3.org/TR/CSS2/selector.html 5 Selectors Contents 5.1 Pattern matching 5.2 Selector synta ...

  3. Golang的防坑小技巧

    Golang的防坑小技巧 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 作为一名小白,在之前没有接触到编程的小伙伴,难免会踩到一些坑,比如说刚刚入门的时候你需要安装环境,学习Gol ...

  4. Spring集成mybatis时mybatis的映射XML配置

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...

  5. centos7 cannot find a valid baseurl for repo

    出现这个问题是因为yum在安装包的过程中,虽然已经联网,但是没法解析远程包管理库对应的域名,所以我们只需要在网络配置中添加上DNS对应的ip地址即可. 操作 1.打开网络配置文件 vi /etc/sy ...

  6. 八、IIC 接口

    8.1 IIC接口介绍 8.1.1 IIC 总线的概念 I2C总线是由Philips公司开发的一种简单.双向二线制同步串行总线.它只需要两根线即可在连接于总线上的器件之间传送信息. 主器件用于启动总线 ...

  7. android数据库简单操作

    1.DbOpenHelper package com.example.dbtest.dbHelper; import android.content.Context; import android.d ...

  8. Spring+CXF整合来管理webservice(服务器启动发布webservice)

    Spring+CXF整合来管理webservice    实现步骤:      1. 添加cxf.jar 包(集成了Spring.jar.servlet.jar ),spring.jar包 ,serv ...

  9. ubuntu 系统关键指令

    1. 查看系统版本号 cat /etc/issue uname -a cat /proc/version 2. linux 32/64 bit? getconf LONG_BIT 3. dpkg 的命 ...

  10. 基于Python的机器学习实战:Apriori

    目录: 1.关联分析 2. Apriori 原理 3. 使用 Apriori 算法来发现频繁集 4.从频繁集中挖掘关联规则 5. 总结 1.关联分析  返回目录 关联分析是一种在大规模数据集中寻找有趣 ...