[NOIp2017] luogu P3952 时间复杂度
跪着看评测很优秀。
题目描述
给你若干个程序,这些程序只有 For 循环,求这些程序的时间复杂度。
Solution
大模拟。讲下细节。
flag[i]flag[i]flag[i] 表示第 iii 位有没有对复杂度产生贡献,而且只有 F 开头的语句才会计算。
ed[i]ed[i]ed[i] 表示第 iii 位配套的 E 的位置(第 iii 位必须是 F)。
注意判 CE 的时候,
F x 2 1
	F x 1 2
	E
E
这个程序也要判 CE。
最后贴上代码
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define max(x,y) ((x)>(y)?(x):(y))
#define ERR() {puts("ERR");return;}
int T;
int L,c;
char R[20];
int ans=0,now,h,cnt,cur;
char str[110][20];
int flag[110];
int x,y;
int st[110],ed[110];
bool bk[130];
int get(char*s,int t){
	int l=strlen(s);
	for(int i=0;i<l;++i){
		if(s[i]==' ') --t;
		if(!t){
			if(s[i+1]=='n') return 101;
			now=i;cnt=0;
			do{
				++now;
				cnt=cnt*10+s[now]-'0';
			}while(s[now+1]>='0'&&s[now+1]<='9');
			return cnt;
		}
	}
}
int count(int l,int r){
	if(ed[l]==r){
		if(flag[l]==1) return count(l+1,r-1)+1;
		else if(!flag[l]) return count(l+1,r-1);
		return 0;
	}
	int sum=0;
	for(int i=l;i<=r;i=ed[i]+1)
		sum=max(sum,count(i,ed[i]));
	return sum;
}
void work(){
	ans=0;
	if(R[3]=='1') ans=0;
	else{
		now=4;
		do{
			++now;
			ans=ans*10+R[now]-'0';
		}while(R[now+1]>='0'&&R[now+1]<='9');
	}
	for(int i=1;i<=L;++i){
		x=get(str[i],2);y=get(str[i],3);
		if(y==101&&x!=101&&str[i][0]=='F') flag[i]=1;
		else if(x>y) flag[i]=-1;
		else flag[i]=0;
	}
	memset(bk,0,sizeof(bk));
	memset(st,0,sizeof(st));h=0;
	memset(ed,0,sizeof(ed));
	for(int i=1;i<=L;++i){
		if(str[i][0]=='F'){
			++h;
			if(bk[str[i][2]]) {ERR();}
			else bk[str[i][2]]=1;
			st[h]=i;
		}
		else{
			ed[st[h]]=i;
			bk[str[st[h]][2]]=0;
			--h;
		}
		if(h<0) ERR() ;
	}
	if(h) ERR();
	puts((count(1,L)==ans)?"Yes":"No");
}
int main(){
	scanf("%d",&T);
	while(T--){
		scanf("%d%s",&L,R+1);
		getchar();
		for(int i=1;i<=L;++i)
			gets(str[i]);
		work();
	}
}
[NOIp2017] luogu P3952 时间复杂度的更多相关文章
- luogu P3952 时间复杂度 模拟
		题目链接 luogu P3952 时间复杂度 题解 直接模拟即可 注意不要直接return 我真是naive ...... 代码 #include<map> #include<sta ... 
- 【luogu P3952 时间复杂度】 题解
		对于2017 D1 T2 这道题 实实在在是个码力题,非常考验耐心. 其实大体的思路并不是非常难想出来,但是要注意的小细节比较多. 题目链接:https://www.luogu.org/problem ... 
- [LUOGU]  P3952 时间复杂度
		其实,也没那么难写 这种模拟题,仔细分析一下输入格式,分析可能的情况,把思路写在纸上,逐步求精,注意代码实现 主要思路就是算一个时间复杂度,和给出的复杂度比较,这就先设计一个函数把给出的复杂度由字符串 ... 
- P3952 时间复杂度
		P3952 时间复杂度 题目描述 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机 ... 
- 洛谷 P3952 时间复杂度 解题报告
		P3952 时间复杂度 题目描述 小明正在学习一种新的编程语言A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会 ... 
- 洛谷 - P3952 - 时间复杂度 - 模拟
		https://www.luogu.org/problemnew/show/P3952 这个模拟,注意每次进入循环的时候把新状态全部入栈,退出循环的时候就退栈. 第一次就错在发现ERR退出太及时,把剩 ... 
- 洛谷P3952 时间复杂度【字符串】【模拟】
		题目描述 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会来啦!下面请你编写程序 ... 
- LOJ P3952 时间复杂度 noip 暴力 模拟
		https://www.luogu.org/problemnew/show/P3952 模拟,日常认识到自己zz. #include<iostream> #include<cstdi ... 
- luogu 3952 时间复杂度
		noip2017 D1T2 时间复杂度 某zz选手考场上写了1.5h 考完之后发现自己写的是错的 但是结果A了??? 题目大意: 一种新的编程语言 A++ 给出一个程序只有循环语句 并给出这个程序的时 ... 
随机推荐
- mysql数据库事务隔离原理
			今天在学习JDBC的时候看到了关于MySQL的事务的隔离级别的问题,感觉内容挺高级的,所以记录一篇文章,以备后面使用. 数据库隔离级别有四种,应用<高性能mysql>一书中的说明: 然后说 ... 
- 大数据平台搭建 - Mysql在linux上的安装
			一.简介 MySQL是一个关系型数据库系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 ... 
- docker harbor搭建笔记
			介绍 Harbor是VMware公司开源的一个用于存储和分发Docker镜像的企业级Registry服务器,以Docker开源的Registry为基础,通过添加一些企业必需的功能特性,例如安全.标识和 ... 
- NPOI 导出添加批注功能
			这个问题在网上搜,都是说如下即可: //添加批注HSSFPatriarch patr = (HSSFPatriarch)sheet.CreateDrawingPatriarch();HSSFComme ... 
- Channel使用技巧
			前言 Go协程一般使用channel(通道)通信从而协调/同步他们的工作.合理利用Go协程和channel能帮助我们大大提高程序的性能.本文将介绍一些使用channel的场景及技巧 场景一,使用cha ... 
- jenkins自动化部署项目4 -- 安装和配置jdk、maven、git
			Jenkins提供了自动安装jdk,maven,git的功能,在[系统设置-全局工具配置]里,但是我自动安装没反应,因此我是先手工安装和配置它们的环境变量然后再在[系统设置-全局工具配置]里配置: 1 ... 
- 利用Python进行数据分析:【IPython】
			一.IPython基础功能 1.IPython是交互式的Python命令行2.安装与使用 #安装:pip install ipython #使用:ipython与Python解释器的使用方法一致 注: ... 
- js深度克隆对象、数组
			function deepCopy(o) { if (o instanceof Array) { var n = []; for (var i = 0; i < o.length; ++i) { ... 
- 你竟然不装油猴插件-Chrome神器TamperMonkey
			油猴插件是一款可以在chrome浏览器中使用油猴脚本的插件.理解为脚本运行的平台 脚本 是一段代码,安装之后,有些脚本能为网站添加新的功能,有些能使网站的界面更加易用,有些则能隐藏网站上烦人的部分内容 ... 
- navicat安装及其简单使用
			一.安装 下载地址:https://pan.baidu.com/s/1bpo5mqj 下载完之后,直接解压出来就能用,看一下解压之后的目录: 双击打开下面这个文件(可以把它添加一个桌面快捷方式,或者添 ... 
