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

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

数据不大可以用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. Redis、Mongo - 目录

    redis redis字典取数据.列表取数据(数据量大) redis 实现栈 - python mongodb - 可视化工具 / pymongo - 使用方法

  2. 2018/04/03 PHP 中的 进制计算问题

    还是先抛出一个问题 017 + 1 = ? -- 如果你知道的话,那也就不用看下面了,哈哈. 答案是 // 15 -- 如果你想的答案和这个不对的话,说明你也有这个问题,也应该学习一下啦. -- 首先 ...

  3. filter push down

    filter push down filter push down :先filter再做join 如果SQL里有where条件,那么数据库引擎会先filter再做join 但是MySQL5.6之前还不 ...

  4. [py]GIL(全局解释器锁):多线程模式

    在多线程 时同一时刻只允许一个线程来访问CPU,直到解释器遇到I/O操作或者操作次数达到一定数目时才会释放GIL 参考 Python虽然不能利用多线程实现多核任务,但可以通过多进程实现多核任务.多个P ...

  5. SQLAlchemy技术文档(中文版)(全)

    原文链接:http://www.cnblogs.com/iwangzc/p/4112078.html(感谢作者的分享) sqlalchemy 官方文档:http://docs.sqlalchemy.o ...

  6. PAT 1074 Reversing Linked List[链表][一般]

    1074 Reversing Linked List (25)(25 分) Given a constant K and a singly linked list L, you are suppose ...

  7. Andrew Ng-ML-第十章-应用机器学习的建议

    1.如何改进性能不好的学习算法 图1.运用到测试集上效果不佳 当进行一个正则化线性回归时,最小化了代价函数得到参数,但是运用到新的测试集上,发现效果不好,那么如何改进? 1).增加训练集.但是实际上花 ...

  8. dialog提交表单

    <div id="dialog" title="添加客户"> <!--表单提交--> <form id="dialogF ...

  9. 浅谈Android View滑动和弹性滑动

    引言 View的滑动这一块在实际开发中是非常重要的,无论是优秀的用户体验还是自定义控件都是需要对这一块了解的,我们今天来谈一下View的滑动. View的滑动 View滑动功能主要可以使用3种方式来实 ...

  10. html02

    复习:HTML标记 p h1~h6 font table>tr>td ul>li ol>li div span form:input>typy :password rad ...