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++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂 ...
随机推荐
- 错误提示 nginx: [emerg] unknown directive "gzip_static"
1.检查nginx配置文件错误提示如下: [root@server nginx]# /applications/nginx/sbin/nginx -t -c /applications/nginx/n ...
- UDP网路会议室的代码
UDP网络会议室视频已经录制好,这里贴上代码仅供参考 MainWindow代码: using System; using System.Collections.Generic; using Syste ...
- 什么是cap
cap理论是分布式系统中非常重要的一个理念 什么是cap理论: Consistency一致性 Availability可用性 Partition-tolerance分区容忍性 CP: 高一致性C和分区 ...
- jQuery EasyUI Datagrid性能优化专题
jQuery EasyUI的Datagrid组件功能算是很强大了,不过性能确实不怎么乐观,而对于性能问题,网络上几乎也找不到相关的优化资料,所谓的牛人们可能都望而却步了.本博客以后会带着分析Data ...
- Math.random()和UUID.randomUUID().toString()性能对比【纯原】
Math.random()和UUID.randomUUID().toString()性能对比 不言而喻,因为Math.random()不需要保证唯一性,所做的操作远比UUID消耗更小的性能, 在部分要 ...
- 使用JS监听键盘按下事件(keydown event)
1.监听全局键盘按下事件,例如监听全局回车事件 1 $(document).keydown(function(event){ 2 if(event.keyCode == 13){ 3 alert('你 ...
- string和list互转
import string str = 'abcde' list = list(str) OR list = str.split() list ['a', 'b', 'c', 'd', 'e'] st ...
- .NET面试题系列(十四)锁
锁 分布式锁 如何解决分布式锁超时问题 我们可以让获得锁的线程开启一个守护线程,用来给快要过期的锁“续航” 当过去了29秒,线程A还没执行完,这时候守护线程会执行expire指令,为这把锁“续命”20 ...
- MyBatis第一个案例的优化,通过映射文件与接口进行绑定
1.创建表emp CREATE DATABASE mybatis; USE mybatis; CREATE TABLE emp( id INT(11) PRIMARY KEY AUTO_INCREME ...
- VSS2005源代码管理
VSS2005使用详细 http://www.docin.com/p-467455948.html 花了差不多一天的时间把vss配置搞明白了~废话不多说,下面简单的介绍下配置的过程:安装VSS2005 ...