写了两三个小时,麻烦倒是不麻烦,要考虑清楚,想全了

只过了样例提交是不是傻,要自己造数据

数据不大可以用STL

建议自己刚一下,不看代码

#include <iostream>
#include <stack>
#include <cstring>
#include <cstdio>
using namespace std;
int n;
char a[200][200];
int fuzadu;
int vis[30];
struct node {
int zimu,id,fzd;
node(int a,int b,int c) {
zimu=a;id=b;fzd=c;
}
//zimu是最后用来删除的,id是check弹栈用的 ,fzd是判断这个F是否能有贡献,是不是O(n)的
};
stack<node> sta;
void read()
{
while(!sta.empty()) sta.pop();
memset(a,0,sizeof(a));
memset(vis,0,sizeof(vis));
scanf("%d O(",&n);
char s=getchar();
if(s=='n') {
scanf("^%d)",&fuzadu);
} else fuzadu=0;
while(s!='\n')s=getchar();
for(int i=1;i<=n;++i)
cin.getline(a[i]+1,'\n');
}
bool check(int &i,int dsr)
{
++i;
for(;i<=n;++i)
{
if(a[i][1]=='F') //F
{
//处理 循环变量
if(vis[a[i][3]-'a']) { //如果出现过的话,ERR
return 1;
} else {
vis[a[i][3]-'a']=1; //vis数组++
sta.push(node(a[i][3]-'a',i,0));//加入栈
}
} else { //E
if(a[i][1]=='E') { //如果结束这个循环
if(sta.empty()) { return 1;}//没有对应的F,ERR
vis[sta.top().zimu]=0;// 这个F的字母以后可以用了
if(sta.top().id==dsr) {
sta.pop();return 0;
}
sta.pop(); //在栈中删除
}
}
}
return 0;
}
void solve()
{
read();
int js=0;//时间复杂度
int ans=0;//最大复杂度
for(int i=1;i<=n;++i)
{
if(a[i][1]=='F') //F
{
//处理 循环变量
if(vis[a[i][3]-'a']) { //如果出现过的话,ERR
{ puts("ERR");return;}
} else {
vis[a[i][3]-'a']=1; //vis数组++
} //F的范围
int j=5,x=0,y=0;
if(a[i][5]=='n') {
sta.push(node(a[i][3]-'a',i,0));//一定不可能是复杂度一定不可能是O(1)的
//如果第一个数是n,那么只有第二个数也是n才能进入循环(复杂度O(1)),否则就直到弹栈为止
if(a[i][7]!='n') { //只需要检查是否ERR即可 if(check(i,i)) {
puts("ERR");return;
}
}
} else {
while(a[i][j]>='0'&&a[i][j]<='9') {x=x*10+a[i][j]-'0';j++;} j++;//读入x
if(a[i][j]=='n') {
sta.push(node(a[i][3]-'a',i,1));
js++;//如果第1个是数字第2个是n,复杂度++
ans=max(ans,js); //更新最高复杂度
}
else {
sta.push(node(a[i][3]-'a',i,0));
while(a[i][j]>='0'&&a[i][j]<='9') {y=y*10+a[i][j]-'0';j++;} j++;
//如果都是数字,分为可以进入和不可以进入
if(x>y) {//不可以进//只需要检查是否ERR即可入
if(check(i,i)) {
puts("ERR");return;
}
}
//可以进入就不管啦,复杂度O(1)
}
}
} else {
//处理E
if(a[i][1]=='E') { //如果结束这个循环
if(sta.empty()) { puts("ERR");return;}//没有对应的F,ERR
vis[sta.top().zimu]=0;// 这个F的字母以后可以用了
js-=sta.top().fzd;//这个复杂度也得--,所以要过程中取max
sta.pop(); //在栈中删除
}
}
}
if(sta.size())
puts("ERR");
else if(ans==fuzadu)
puts("Yes");
else puts("No");
}
int main()
{
// freopen("a.in","r",stdin);
int T;
scanf("%d",&T);
while(T--)
solve();
return 0;
}

P3952 NOIP2017 时间复杂度的更多相关文章

  1. 【比赛】NOIP2017 时间复杂度

    恶心的模拟题,考场上犯了一堆错误,多组数据清空没清完.数组开小...民间都是50分,结果CCF90.. 考完后随便改改就过了,还好只少了10分,如果真的是50,我估计会疯掉. 因为考场的时候没写好,所 ...

  2. [Luogu 3952] NOIP2017 时间复杂度

    [Luogu 3952] NOIP2017 时间复杂度 一年的时间说长不长,说短,也不短. 一年之内无数次觉得难得可怕的题目,原来也就模拟这么回事儿. #include <cstdio> ...

  3. 【洛谷P3952】[NOIP2017]时间复杂度

    时间复杂度 题目链接 对于 100%的数据:L≤100 . 很明显的模拟题 然而考试时还是爆炸了.. 调了一下午.. 蒟蒻表示不会离线操作.. 直接贴代码: #include<cstdio> ...

  4. NOIP2017 时间复杂度 大模拟

    再写一道大模拟题. 由于是限时写的,相当于考场代码,乱的一批. 题目链接:P3952 时间复杂度 先记几个教训: 字符串形式的数字比较大小老老实实写函数,字典序都搞错几次了 栈空的时候不但pop()会 ...

  5. 【 P3952】 时间复杂度 大模拟题解

    题目链接 完全模拟 1.模拟结果 当我们的模拟程序执行结束时,直接执行模拟结果函数,用于比对我们的结果和数据给出的结果. bool yes(char a[],char b[]) { ;i<=;+ ...

  6. luoguP3952 [NOIP2017]时间复杂度 模拟

    原本只是想看下多久能码完时间复杂度 然后在30min内就码完了,然后一A了???? 首先,这题完全可以离线做 我们先把所有的操作读完,判断合不合法之后,再去判断和标准答案的关系 具体而言 把所有的操作 ...

  7. [NOIP2017]时间复杂度

    题目描述 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会来啦!下面请你编写程序 ...

  8. 【题解】洛谷P3952 [NOIP2017TG] 时间复杂度(模拟)

    题目来源:洛谷P3952 思路 纯模拟没啥可说的了 果然好复杂 参考了你谷一个40行代码 代码 #include<iostream> #include<cstdio> #inc ...

  9. 【题解】NOIP2017时间复杂度

    对大模拟抱有深深的恐惧……不过这次写好像还好?拿个栈维护一下循环的嵌套,然后重定义一下读入即可.记得去年在考场上面死活调不粗来,代码也奇丑无比……希望今年能好一点吧! #include <bit ...

随机推荐

  1. Excel-字符串连接

    使用函数concatenate()将多个字符连接起来

  2. git使用简单指南

    参考: https://www.fengerzh.com/git-reset/?utm_source=tool.lu git建库小结 (一)远端:1.在git网站上建设一个远程仓库复制git远程仓库地 ...

  3. 分布式网格缓存Coherence简介

    Coherence企业级缓存(一) 特点 摘要:Oracle Coherence是一个企业级的分布式集群缓存框架.具有自管理,自恢复,高可用性,高扩展性等优良特点,在电信BOSS等项目中有很大的应用价 ...

  4. DeepMind提出空间语言集成模型SLIM,有效编码自然语言的空间关系

    前不久,DeepMind 提出生成查询网络 GQN,具备从 2D 画面到 3D 空间的转换能力.近日.DeepMind 基于 GQN 提出一种新模型.可以捕捉空间关系的语义(如 behind.left ...

  5. sso架构图

  6. openstack 部署笔记--keystone

    控制节点 安装keystone包 # yum install openstack-keystone httpd mod_wsgi keystone配置文件 # vim /etc/keystone/ke ...

  7. SVN 取消版本控制并添加至忽略列表

    忽略已经版本控制的文件忽略文件和目录 起因: 由于项目中的IDE Jdeveloper在某些指定目录下面会生成server.xml以及common文件夹,且包含一个名为bc4j.xcfg的文件,每次当 ...

  8. javascript的Object对象的defineProperty和defineProperties

    Object的属性 查看官网:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Obje ...

  9. ARM_Core的处理器模式与寄存器,结构杂谈

    ARM处理器的工作状态:ARM处理器有两种工作状态.在程序的执行过程中,处理器可以在两种工作状态之间切换,并且不影响 相应寄存器中的内容. ARM状态,此时处理器执行32位对齐的ARM指令:BX指令, ...

  10. Instruments(性能调优 12.3)

    Instruments Instruments是Xcode套件中没有被充分利用的一个工具.很多iOS开发者从没用过Instruments,或者只是用Leaks工具检测循环引用.实际上有很多Instru ...