NOIP2017TG D1T2 时间复杂度
题目链接
题意:
给出仅表示循环结构的简化语句,指出编译错误和时间复杂度。
程序1(100pt):
字符串处理,字母数字夹杂,上$scanf$来做。注意到有复数种情况,各种空格空行要分类讨论清楚。
考虑同时查错和做复杂度,思考一下发现不行:出现不执行的循环体,查错要求进入,做复杂度要求跳过,不适合硬生生糅合在一起。
考虑先查错,再做复杂度。考虑到之后有跳过循环体的情况,查错时把同一对循环首尾做一个链接。
实现时,用栈来维护“层层深入,逐步退出”的数据关系。
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #define IL inline using namespace std; const int N=100;int L,w;bool num(char ch){return '0'<=ch&&ch<='9';}struct Txt{bool f,f1,f2; //f:'F' f1:x==n f2:y==nchar ch;int x,y;}str[N+3];struct Stk{char ch;int id;}stk[N+3];bool vis['z'+3];bool mrk[N+3];int top,ans;int jmp[N+3];int main(){int T; char ch;scanf("%d\n",&T);while(T--){scanf("%d O(%c",&L,&ch);if(ch=='1')w=0;else scanf("^%d",&w);scanf(")\n");for(int i=1;i<=L;i++){scanf("%c",&ch);if(ch=='E'){str[i].f=false;scanf("\n");continue;}str[i].f=true;scanf(" %c %c",&str[i].ch,&ch);if(ch=='n'){str[i].f1=true;scanf("%c",&ch);}else {str[i].x=ch-'0';str[i].f1=false;scanf("%c",&ch);while(num(ch)){str[i].x=str[i].x*10+ch-'0';scanf("%c",&ch);}}scanf("%c",&ch);if(ch=='n'){str[i].f2=true;scanf("\n");}else {str[i].y=ch-'0';str[i].f2=false;scanf("%c",&ch);while(num(ch)){str[i].y=str[i].y*10+ch-'0';scanf("%c",&ch);}}}bool flag=false; top=0;memset(vis,0,sizeof vis);for(int i=1;i<=L;i++)if(str[i].f){if(vis[(int)str[i].ch]){flag=true;break;}vis[(int)str[i].ch]=true;top++;stk[top].ch=str[i].ch;stk[top].id=i;}else {if(top==0){flag=true;break;}vis[(int)str[stk[top].id].ch]=false;jmp[stk[top].id]=i;jmp[i]=stk[top].id;top--;}if(!flag&&top>0)flag=true;if(flag){printf("ERR\n");continue;}top=ans=0;memset(mrk,0,sizeof mrk);for(int i=1;i<=L;i++)if(str[i].f){if(((!str[i].f1)&&(!str[i].f2)&&(str[i].x>str[i].y))||((str[i].f1)&&(!str[i].f2))){i=jmp[i];continue;}if((!str[i].f1)&&str[i].f2){top++;mrk[i]=true;ans=max(ans,top);}}elseif(mrk[jmp[i]])top--;if(ans==w)printf("Yes\n");else printf("No\n");}return 0;}
小结:
$scanf$处理字符串熟练度$++$!
一个真实的故事:当年考联赛同队有人把$ERR$写成了$Err$结果怒爆$0$。
转载于:https://www.cnblogs.com/Hansue/p/11018758.html
NOIP2017TG D1T2 时间复杂度相关推荐
- [NOIp2017] 时间复杂度
NOIp 2017 D1T2 时间复杂度 洛谷 P3952 传送门 稍微压了压行,写到了60行&&1.3kb以内,感觉自己的写法还是很清晰很优秀的. 少量的特判,比别的代码简洁多了. ...
- 【openjudge】【字符串+模拟】1777:文件结构“图”
[题目传送门:]戳 [描述:] 在计算机上看到文件系统的结构通常很有用.Microsoft Windows上面的"explorer"程序就是这样的一个例子.但是在有图形界面之前,没 ...
- [SinGuLaRiTy] NOIP2017 提高组
[SinGuLaRiTy-1048] Copyright (c) SinGuLaRiTy 2018. All Rights Reserved. NOIP2017过了这么久,现在2018了才找到寒假这么 ...
- NOIP2017时间复杂度(提高D1T2)
标签:模拟 题目 题目传送门 题目描述 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是 ...
- 1007: 小Y的问题【TYVJ2016国庆赛D1T2】
Description有个孩子叫小Y,一天,小Y拿到了一个包含n个点和n-1条边的无向连通图,图中的点用1~n的整数编号.小Y突发奇想,想要数出图中有多少个"Y字形".一个&quo ...
- 数据结构(02)— 时间复杂度与空间复杂度转换
1. 时间复杂度转化为空间复杂度 常用的降低时间复杂度的方法有递归.二分法.排序算法.动态规划等,降低空间复杂度的核心思路就是,能用低复杂度的数据结构能解决问题,就千万不要用高复杂度的数据结构. ...
- 【算法基础】时间复杂度:大O阶方法
前言: 数据结构与算法中,数据结构就像一个厨房(有食材,有餐具,各种炊具),而算法就像厨师脑海中的菜谱,只有好的食材(数据),整洁有序的厨房(数据组织),简洁明了的菜谱(算法),厨师才能做出美味(程序 ...
- P3952 NOIP2017 时间复杂度
写了两三个小时,麻烦倒是不麻烦,要考虑清楚,想全了 只过了样例提交是不是傻,要自己造数据 数据不大可以用STL 建议自己刚一下,不看代码 #include <iostream> #incl ...
- 20140725 快速排序时间复杂度 sTL入门
1.快速排序的时间复杂度(平均时间复杂度为) 数组本身就有序时,效果很差为O(n^2) 2.STl入门 (1) C++内联函数(inline)和C中宏(#define)区别 内联函数有类型检查,宏定义 ...
最新文章
- 2019年春季学期第四周作业Compile Summarize
- 一个简单的记事本程序
- java笔记(3):String(2)
- 整车物流系统源代码_整车物流AGV智能搬运机器人一阶段实地测试顺利完成
- .NET Core 3.0预览版7中的ASP.NET Core和Blazor更新
- 最可怕的企业“内卷化”,是走入以下10个误区而不自知
- Struts xml中Action的method与路径的三种匹配方法
- 用Java实现向Cassandra数据库中插入和查询数据
- 使用CASEWHEN批量拼凑Update语句
- QNX分布式实时操作系统初步认识-QNX系统了解认识
- jordan标准 相似_矩阵的Jordan标准形及其相似变换矩阵.pdf
- YYC松鼠视频短信对接教程
- 同城服务小程序开发的好处和功能方案介绍
- mysql表分区join_​实战:Flink 1.12 维表 Join Hive 最新分区功能体验
- cmd结束指定端口号的进程
- Apollo 3.0代码浅析(一)
- 江西伟人系列第三篇:唐宋八大家(欧阳修)
- 4.21版本工程以后材质里CustomNode添加.usf文件失败解决办法
- linux进程q是什么意思,Linux zombie进程
- HPUNIX环境常用查看硬件设备信息命令小结