写了两三个小时,麻烦倒是不麻烦,要考虑清楚,想全了
只过了样例提交是不是傻,要自己造数据
数据不大可以用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++;//读入xif(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;
}

转载于:https://www.cnblogs.com/dsrdsr/p/9548509.html

P3952 NOIP2017 时间复杂度相关推荐

  1. [NOIp2017] 时间复杂度

    NOIp 2017 D1T2 时间复杂度 洛谷 P3952 传送门 稍微压了压行,写到了60行&&1.3kb以内,感觉自己的写法还是很清晰很优秀的. 少量的特判,比别的代码简洁多了. ...

  2. NOIP2017时间复杂度(提高D1T2)

    标签:模拟 题目 题目传送门 题目描述 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是 ...

  3. OI每周刷题记录——lrllrl

    看这标题就知道我是模仿的hzwer大佬,远程%%% 大佬的OI经历让蒟蒻我深受感触,为了晚一些AFO本蒟蒻也得加油了 从高二上期第一周开始计数,每个星期天更一次,一直更到我AFO 如果这是我此生最后一 ...

  4. 语法入门*算法入门题单

    作者:王清楚 链接:https://ac.nowcoder.com/discuss/817596?type=101&order=0&pos=1&page=4&chann ...

  5. 【新手上路】语法入门算法入门题单

    作者:王清楚 链接:[新手上路]语法入门&算法入门题单_ACM竞赛_ACM/CSP/ICPC/CCPC/比赛经验/题解/资讯_牛客竞赛OJ_牛客网 来源:牛客网 介绍:本题单分为语法入门和算法 ...

  6. P3952 时间复杂度(模拟)

    https://www.luogu.org/problem/P3952 题目描述 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程 ...

  7. 洛谷P3952 时间复杂度【字符串】【模拟】

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

  8. [NOIP2017 提高组] 时间复杂度

    题目 时间复杂度[NOIP2017提高组] 题目描述 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明 ...

  9. 计蒜客 时间复杂度 (模拟) 洛谷 P3952 时间复杂度

    链接 : Here! 思路 : 这是一道大模拟, 区分好情况就没问题了 循环构成部分 : $F , x , i , j$ 和 $E$ , 需要注意的是 $i , j$, - 分析 $i, j$ 的情况 ...

最新文章

  1. C# 36进制转10进制
  2. leetcode算法题--搜索旋转排序数组
  3. 多线程不重复读取数据_别再犯错了,多线程访问同一个资源一定要上锁?
  4. 服务器连接硬盘出错,在服务器上使物理磁盘资源联机时出错 - Windows Server | Microsoft Docs...
  5. 企业级php第三方支付平台,ThinkPHP新版企业级php第三方api第四方支付平台程序源码商业版 带接口文件等 某宝售价3000元...
  6. [leedcode][JAVA][365][BFS]
  7. Windows下编译配置Caffe的GPU版本
  8. 《电子元器件的可靠性》——第1章概述
  9. 面向对象的七种设计原则
  10. ESFramework Demo -- P2P通信Demo(附源码)
  11. pythondjangoddos_django带服务器
  12. 最短路径之弗洛伊德算法
  13. 深入理解JVM - 虚拟机字节码指令集
  14. 目前已完成linux适配的软件,WPS Linux版与国产统一操作系统UOS完成适配:体验追上Wintel...
  15. UE4虚拟摄像头插件
  16. ubuntu 16.04无法上网
  17. 24个最新创意进度条设计,分分钟让你灵感爆表!!!
  18. mac电脑运行很卡不流畅,如何给mac提速?
  19. 6.Striped64源码解析
  20. 互联网常用的几种有效引流方法:精准引流获客加人吸粉

热门文章

  1. mysql同事包含_mysql 包含关系处理
  2. 2022-2028年中国婴儿用品市场投资分析及前景预测报告
  3. 非本地类型不能定义方法 cannot define new methods on non-local type time.Duration
  4. vb中可视对象的操作
  5. 关于pytorch--embedding的问题
  6. python中使用指定GPU
  7. Adam那么棒,为什么还对SGD念念不忘 (2)—— Adam的两宗罪
  8. 部署可扩展的目标检测管道:推理过程(下)
  9. 客快物流大数据项目(五十六): 编写SparkSession对象工具类
  10. Python:urllib2模块Handler处理器 和 自定义Opener