[NOIp2017] 时间复杂度
NOIp 2017 D1T2 时间复杂度
洛谷 P3952 传送门
稍微压了压行,写到了60行&&1.3kb以内,感觉自己的写法还是很清晰很优秀的。
少量的特判,比别的代码简洁多了。
时间复杂度转换成n的次数,O(1)则为0次。
t代表声明的复杂度,nt代表计算出的复杂度,最后判断是否相等。
首先每行每行读入,F就入栈,E就出栈不用多说。
用hash判断CE的情况。入栈出栈的时候同步修改h。
sz记录了F和E的差,如果运算过程中出现了负的sz或者sz的终值不为0,则CE。
把字符串转换成整数的算法类似读入优化。
如果一个循环不会被进入,就lock一下。
代表它之后的时间复杂度不会被更新。
lock代表该无效循环对应的栈中位置的深度。
出栈的时候就解除lock。
用一个tot[i]代表栈中从栈底开始连续i层数据的总时间复杂度。
如果新循环合法且复杂度为n、不为常数,那么新一层栈的tot为上一层的tot+1。
根据tot更新nt。
1 #include<cstdio> 2 #include<cstring> 3 4 int n,m,h[150],tot[105],tp,t; 5 char st[105]; 6 7 int main() 8 { 9 scanf("%d",&n); 10 while(n--) 11 { 12 memset(h,0,sizeof(h)); 13 memset(tot,0,sizeof(tot)); 14 scanf("%d",&m); 15 char ex[10]; 16 scanf("%s",ex+1); 17 t=tp=0; 18 if(ex[3]=='n') 19 for(int p=5;ex[p]!=')';p++)t=10*t+ex[p]-'0'; 20 int sz=0,er=0,nt=0,lock=0; 21 for(int i=1;i<=m;i++) 22 { 23 char op[5],nw[5],fr[5],to[5]; 24 scanf("%s",op+1); 25 if(op[1]=='E') 26 { 27 sz--; 28 if(tp==lock)lock=0; 29 if(sz<0)er=1; 30 else h[(int)(st[tp--])]=0; 31 continue; 32 } 33 sz++; 34 scanf("%s%s%s",nw+1,fr+1,to+1); 35 if(h[(int)(nw[1])]) 36 { 37 er=1; 38 continue; 39 } 40 h[(int)(nw[1])]=1; 41 st[++tp]=nw[1]; 42 tot[tp]=(fr[1]!='n'&&to[1]=='n'&&(!lock))?tot[tp-1]+1:tot[tp-1]; 43 if(fr[1]!='n'&&to[1]=='n'&&(!lock))nt=nt>tot[tp]?nt:tot[tp]; 44 int ff=0,tt=0; 45 if(fr[1]!='n') 46 for(int p=1;fr[p]>='0'&&fr[p]<='9';p++)ff=10*ff+fr[p]-'0'; 47 if(to[1]!='n') 48 for(int p=1;to[p]>='0'&&to[p]<='9';p++)tt=10*tt+to[p]-'0'; 49 if(fr[1]=='n'&&to[1]!='n')lock=tp; 50 if(fr[1]!='n'&&to[1]!='n'&&(ff>tt))lock=tp; 51 } 52 if(er||(sz!=0))printf("ERR\n"); 53 else if(nt==t)printf("Yes\n"); 54 else printf("No\n"); 55 } 56 return 0; 57 }
转载于:https://www.cnblogs.com/eternhope/p/9720661.html
[NOIp2017] 时间复杂度相关推荐
- P3952 NOIP2017 时间复杂度
写了两三个小时,麻烦倒是不麻烦,要考虑清楚,想全了 只过了样例提交是不是傻,要自己造数据 数据不大可以用STL 建议自己刚一下,不看代码 #include <iostream> #incl ...
- NOIP2017时间复杂度(提高D1T2)
标签:模拟 题目 题目传送门 题目描述 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是 ...
- 语法入门*算法入门题单
作者:王清楚 链接:https://ac.nowcoder.com/discuss/817596?type=101&order=0&pos=1&page=4&chann ...
- 【新手上路】语法入门算法入门题单
作者:王清楚 链接:[新手上路]语法入门&算法入门题单_ACM竞赛_ACM/CSP/ICPC/CCPC/比赛经验/题解/资讯_牛客竞赛OJ_牛客网 来源:牛客网 介绍:本题单分为语法入门和算法 ...
- OI每周刷题记录——lrllrl
看这标题就知道我是模仿的hzwer大佬,远程%%% 大佬的OI经历让蒟蒻我深受感触,为了晚一些AFO本蒟蒻也得加油了 从高二上期第一周开始计数,每个星期天更一次,一直更到我AFO 如果这是我此生最后一 ...
- [NOIP2017 提高组] 时间复杂度
题目 时间复杂度[NOIP2017提高组] 题目描述 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明 ...
- JZOJ 5474. 【NOIP2017提高组正式赛】时间复杂度
Description 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序,于是你的机会来啦!下面请 ...
- 【NOIP2017】时间复杂度
题面 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序,于是你的机会来啦!下面请你编写程序来判断小 ...
- 『宝藏 状态压缩DP NOIP2017』
宝藏(NOIP2017) Description 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的m 条道路和它们的长度. 小明决 ...
最新文章
- 【iOS开发】静态库 a文件合成脚本解释
- python re.match、re.search以及re.findall的区别
- 学会使用Chromium中的LOG
- 【Linux】一步一步学Linux——md5sum命令(61)
- SAP HANA Schemas 和 HDI Containers
- Sublime Text插件的离线安装-使用htmlprettify美化您的HTML代码 1
- android开发之Glide加载图片之url转bitmap的方法
- angular学习的一些小笔记(中)之表单验证
- IDEA 配置 SpringBoot 启动端口
- RX库中的IDisposable对象
- 【正在完善】高级CSS特效解析其示范案例
- qt实现点击出现窗口,点击其他任何地方窗口消失
- jsessionid 在谷歌一直变_谷歌相册也要收费,这次我全靠这些云盘救命
- 墨者学院——密码学加解密实训(Base64转义)
- 导出DMP文件实现数据库备份、数据迁移流程
- 浅谈shiro出现Authentication failed for token submission(认证失败)异常的几种可能
- OpenLayers按像素距离平移地图
- 软件工程导论04-设计工程
- UE5 tiles 材质缩放平铺
- Datawhale 计算机视觉基础-图像处理(上)-Task01 OpenCV框架与图像插值算法
热门文章
- c语言内部超链接,HTML5中文本元素超链接的属性
- python数据分析系统_Python数据分析,系统步骤介绍!
- 2021 ICPC Asia Jinan Regional Contest-J Determinant(取模高斯消元)
- AcWing 842. 排列数字(DFS)
- windows 截屏快捷键x220_电脑截屏快捷键是什么啊
- TensorFlow-Serving的使用实战案例笔记(tf=1.4)
- [NLP]OpenNLP命名实体识别(NameFinder)的使用
- 加速网站速度的最佳做法_(2)把样式表放在顶部
- MYSQL的主从和主主复制模式
- @Aspect @around 多个参数