noip 2017 时间复杂度
自认为是少有的复杂的代码
这题思想很简单,就是大模拟
对于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 时间复杂度的更多相关文章
- NOIP 2017 时间复杂度 (模拟)
题目大意:略 傻了吧唧的我wa了好几次 我的模拟功底真的不咋地 linux下用gets会报错,我用的fgets #include <string> #include "stdio ...
- 「NOIP 2017」列队
题目大意:给定一个 $n times m$ 的方阵,初始时第 $i$ 行第 $j$ 列的人的编号为 $(i-1) times m + j$,$q$ 次给出 $x,y$,让第 $x$ 行 $y$ 列的人 ...
- NOIP 2017 解题报告
---恢复内容开始--- NOIP 2017 的题真的很难啊,怪不得当年我这个萌新爆零了(当然现在也是萌新)越学越觉得自己什么都不会. 想要成为强者要把这些好题都弄懂弄透 至少现在6道题我都比较陌生 ...
- NOIP 2017 列队 - Splay - 树状数组
题目传送门 传送点I 传送点II 题目大意 (家喻户晓的题目应该不需要大意) (我之前咋把NOIP 2017打成了NOIP 2018,好绝望) Solution 1 Splay 每行一颗Splay,没 ...
- 【游记】NOIP 2017
时间:2017.11.11~2017.11.12 地点:广东省广州市第六中学 Day1 T1:看到题目,心想这种题目也能放在T1? 这个结论我之前遇到过至少3次,自己也简单证明过.初见是NOIP200 ...
- NOIP 2017 小凯的疑惑
# NOIP 2017 小凯的疑惑 思路 a,b 互质 求最大不能表示出来的数k 则k与 a,b 互质 这里有一个结论:(网上有证明)不过我是打表找的规律 若 x,y(设x<y) 互质 则 : ...
- 历年真题 未完成(Noip 2008 - Noip 2017)
Noip 2008 :全部 Noip 2009 :全部 Noip 2010 :AK Noip 2011 :AK Noip 2012 : Vigenère 密码,国王游戏,开车旅行 Noip 2013 ...
- 洛谷 P3951 NOIP 2017 小凯的疑惑
洛谷 P3951 NOIP 2017 小凯的疑惑 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付 ...
- NOIP 2017 提高组 day1t2 时间复杂度
P3952 时间复杂度 标签 NOIp提高组 2017 时空限制 1000ms / 128MB 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂 ...
随机推荐
- python字典遍历的几种方法
(1)遍历key值 >>> a {'} >>> for key in a: print(key+':'+a[key]) a:1 b:2 c:3 >> ...
- python爬虫 bs4_4select()教程
http://www.w3.org/TR/CSS2/selector.html 5 Selectors Contents 5.1 Pattern matching 5.2 Selector synta ...
- Golang的防坑小技巧
Golang的防坑小技巧 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 作为一名小白,在之前没有接触到编程的小伙伴,难免会踩到一些坑,比如说刚刚入门的时候你需要安装环境,学习Gol ...
- Spring集成mybatis时mybatis的映射XML配置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...
- centos7 cannot find a valid baseurl for repo
出现这个问题是因为yum在安装包的过程中,虽然已经联网,但是没法解析远程包管理库对应的域名,所以我们只需要在网络配置中添加上DNS对应的ip地址即可. 操作 1.打开网络配置文件 vi /etc/sy ...
- 八、IIC 接口
8.1 IIC接口介绍 8.1.1 IIC 总线的概念 I2C总线是由Philips公司开发的一种简单.双向二线制同步串行总线.它只需要两根线即可在连接于总线上的器件之间传送信息. 主器件用于启动总线 ...
- android数据库简单操作
1.DbOpenHelper package com.example.dbtest.dbHelper; import android.content.Context; import android.d ...
- Spring+CXF整合来管理webservice(服务器启动发布webservice)
Spring+CXF整合来管理webservice 实现步骤: 1. 添加cxf.jar 包(集成了Spring.jar.servlet.jar ),spring.jar包 ,serv ...
- ubuntu 系统关键指令
1. 查看系统版本号 cat /etc/issue uname -a cat /proc/version 2. linux 32/64 bit? getconf LONG_BIT 3. dpkg 的命 ...
- 基于Python的机器学习实战:Apriori
目录: 1.关联分析 2. Apriori 原理 3. 使用 Apriori 算法来发现频繁集 4.从频繁集中挖掘关联规则 5. 总结 1.关联分析 返回目录 关联分析是一种在大规模数据集中寻找有趣 ...