题目链接


Solution

用栈进行模拟.

记录一个 \(map\) 来看循环变量有没有用过.

对于每一次入栈都加信息.

出栈直接将 \(top\) 减一下.

反正一堆乱七八糟的东西瞎搞...

注意条件如果循环内均为常数,算作 \(O(1)\).

Code

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int inf=0x3f3f3f3f;
  4. map<char,bool>v;
  5. int sta[108],top,sum[108];
  6. char k[108];
  7. int cal(string s)
  8. {
  9. if(s=="n")return inf;
  10. int w=0,i=0;
  11. while(s[i]>='0'&&s[i]<='9')
  12. w=w*10+s[i]-'0',i++;
  13. return w;
  14. }
  15. int work(int n)
  16. {
  17. top=0; int flag=0,ans=1;
  18. for(char i='a';i<='z';i++)v[i]=0;
  19. while(n--)
  20. {
  21. char ch,i; string x,y;
  22. cin>>ch; sum[0]=1;
  23. if(ch=='F')
  24. {
  25. cin>>i;
  26. if(v[i])flag=-1; v[i]=1;
  27. cin>>x; cin>>y;
  28. if(flag==-1)continue;
  29. int w,x1=cal(x),y1=cal(y);
  30. if(x1==y1)w=1;
  31. if(x1>y1)w=0;
  32. if(x1<y1)
  33. {
  34. if(x1==inf||y1==inf)
  35. w=2;
  36. else w=1;
  37. }
  38. sta[++top]=w; k[top]=i;
  39. if(w==1)sum[top]=sum[top-1];
  40. if(w==2)sum[top]=sum[top-1]+1;
  41. if(w==0)sum[top]=0;
  42. if(sum[top-1]==0)sum[top]=0;
  43. flag=max(flag,sum[top]);
  44. }
  45. if(ch=='E')
  46. {
  47. if(flag==-1)continue;
  48. v[k[top]]=0;
  49. top--;
  50. }
  51. }
  52. if(flag==0)flag++;
  53. if(top!=0)flag=-1;
  54. return flag-1;
  55. }
  56. int main()
  57. {
  58. int t;
  59. cin>>t;
  60. while(t--)
  61. {
  62. int L,cost=0; string T;
  63. cin>>L>>T;
  64. if(T[2]=='1')cost=0;
  65. else{
  66. int i=0;
  67. while(T[i]>'9'||T[i]<'0')i++;
  68. while(T[i]>='0'&&T[i]<='9'){cost=cost*10+T[i]-'0';i++;}
  69. }
  70. int flag=work(L);
  71. if(flag<0)cout<<"ERR"<<endl;
  72. else
  73. if(flag==cost)cout<<"Yes"<<endl;
  74. else cout<<"No"<<endl;
  75. }
  76. }

[NOIP2017] 时间复杂度 (模拟,栈)的更多相关文章

  1. luoguP3952 [NOIP2017]时间复杂度 模拟

    原本只是想看下多久能码完时间复杂度 然后在30min内就码完了,然后一A了???? 首先,这题完全可以离线做 我们先把所有的操作读完,判断合不合法之后,再去判断和标准答案的关系 具体而言 把所有的操作 ...

  2. [NOIP2017]时间复杂度(模拟)

    sscanf读入数字,getline(cin,string)读一整行,其余暴力模拟即可. #include<cstdio> #include<string> #include& ...

  3. 【比赛】NOIP2017 时间复杂度

    恶心的模拟题,考场上犯了一堆错误,多组数据清空没清完.数组开小...民间都是50分,结果CCF90.. 考完后随便改改就过了,还好只少了10分,如果真的是50,我估计会疯掉. 因为考场的时候没写好,所 ...

  4. [Luogu 3952] NOIP2017 时间复杂度

    [Luogu 3952] NOIP2017 时间复杂度 一年的时间说长不长,说短,也不短. 一年之内无数次觉得难得可怕的题目,原来也就模拟这么回事儿. #include <cstdio> ...

  5. ACM/ICPC 之 用双向链表 or 模拟栈 解“栈混洗”问题-火车调度(TSH OJ - Train)

    本篇用双向链表和模拟栈混洗过程两种解答方式具体解答“栈混洗”的应用问题 有关栈混洗的定义和解释在此篇:手记-栈与队列相关 列车调度(Train) 描述 某列车调度站的铁道联接结构如Figure 1所示 ...

  6. java 16 - 5 LinkedList模拟栈数据结构的集合

    请用LinkedList模拟栈数据结构的集合,并测试 题目的意思是: 你自己的定义一个集合类,在这个集合类内部可以使用LinkedList模拟. package cn_LinkedList; impo ...

  7. hdu 4699 Editor 模拟栈

    思路:刚开始用STL中的栈,一直RE……,之后改为手动模拟栈操作,在注意点细节就可以了!!! 代码如下: #include<cstdio> #include<cstring> ...

  8. 【DataStructure In Python】Python模拟栈和队列

    用Python模拟栈和队列主要是利用List,当然也可以使用collection的deque.以下内容为栈: #! /usr/bin/env python # DataStructure Stack ...

  9. 第一回写的用arraylist模拟栈操作

    package hashMap; import java.util.ArrayList; import d.Student; /** * 用ArrayList模拟栈操作 * @author zhuji ...

随机推荐

  1. _variant_t的使用

    我们先看看COM所支持的一些类型的基本类: (微软提供,在comdef.h中定义) 在COM中使用的标准类Class如下所示: _bstr_t:对BSTR类型进行打包,并提供有用的操作和方法: _co ...

  2. s///|s()()i|/i|/g|\U|\u|\L|\l|\U\l|split|join|匹配到hash|匹配到变量|`date`|$^I

    #!/usr/bin/perl -w use strict; use warnings; $_='She is a good girl and likes helping others '; s/sh ...

  3. c#中的里氏转换和Java中强制类型转换在多态中的应用

    在c#中: 注意: 子类并没有继承父类的构造函数,而是会默认调用父类那个无参数的构造函数. 如果一个子类继承了一个父类,那么这个子类除了可以使用自己的成员外,还可以使用从父类那里继承过来的成员.但是父 ...

  4. cocos2dx观察者模式EventListenerCustom的使用(代替NotificationCenter)

    在cocos2dx 3.x版本已经被弃用,改用EventDispatcher代替. 观察者模式是MVC模式的一种,一个model可以对应很多个观察者view,当model收到事件通知时,对应的view ...

  5. cocos2dx lua 热更新方案的实现

    (Upgrade.h) #include <stdio.h> #include "cocos2d.h" #include "framework/utils/U ...

  6. CentOS 编译安装PHP5.6(7以上也通用)

    由于公司有新服务器需要构建一套LNMP平台,且需要编译安装各个部件,所以记录下此文章. 这是安装PHP涉及到的软件包(可以自行决定使用哪个版本): ├── libiconv-1.15.tar.gz ├ ...

  7. 2-python基础

    1.第一个程序 新建一个python文件,然后写上代码,运行即可 print("hello world") 2.变量 变量就是存东西,供后面来用的 变量名只能是 字母.数字或下划线 ...

  8. token验证机制

    最近在vue-cli项目实现登录的过程中用到了token验证,在此总结如下 1. 登录时,客户端通过用户名与密码请求登录 2. 服务端收到请求去验证用户名与密码 3. 验证通过,服务端会签发一个Tok ...

  9. mysql的字符串连接符

    以前用SQL Server 连接字符串是用“+”,现在数据库用mysql,写个累加两个字段值SQL语句居然不支持"+",郁闷了半天在网上查下,才知道mysql里的+是数字相加的操作 ...

  10. LeetCode(290) Word Pattern

    题目 Given a pattern and a string str, find if str follows the same pattern. Here follow means a full ...