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

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

数据不大可以用STL

建议自己刚一下,不看代码

  1. #include <iostream>
  2. #include <stack>
  3. #include <cstring>
  4. #include <cstdio>
  5. using namespace std;
  6. int n;
  7. char a[200][200];
  8. int fuzadu;
  9. int vis[30];
  10. struct node {
  11. int zimu,id,fzd;
  12. node(int a,int b,int c) {
  13. zimu=a;id=b;fzd=c;
  14. }
  15. //zimu是最后用来删除的,id是check弹栈用的 ,fzd是判断这个F是否能有贡献,是不是O(n)的
  16. };
  17. stack<node> sta;
  18. void read()
  19. {
  20. while(!sta.empty()) sta.pop();
  21. memset(a,0,sizeof(a));
  22. memset(vis,0,sizeof(vis));
  23. scanf("%d O(",&n);
  24. char s=getchar();
  25. if(s=='n') {
  26. scanf("^%d)",&fuzadu);
  27. } else fuzadu=0;
  28. while(s!='\n')s=getchar();
  29. for(int i=1;i<=n;++i)
  30. cin.getline(a[i]+1,'\n');
  31. }
  32. bool check(int &i,int dsr)
  33. {
  34. ++i;
  35. for(;i<=n;++i)
  36. {
  37. if(a[i][1]=='F') //F
  38. {
  39. //处理 循环变量
  40. if(vis[a[i][3]-'a']) { //如果出现过的话,ERR
  41. return 1;
  42. } else {
  43. vis[a[i][3]-'a']=1; //vis数组++
  44. sta.push(node(a[i][3]-'a',i,0));//加入栈
  45. }
  46. } else { //E
  47. if(a[i][1]=='E') { //如果结束这个循环
  48. if(sta.empty()) { return 1;}//没有对应的F,ERR
  49. vis[sta.top().zimu]=0;// 这个F的字母以后可以用了
  50. if(sta.top().id==dsr) {
  51. sta.pop();return 0;
  52. }
  53. sta.pop(); //在栈中删除
  54. }
  55. }
  56. }
  57. return 0;
  58. }
  59. void solve()
  60. {
  61. read();
  62. int js=0;//时间复杂度
  63. int ans=0;//最大复杂度
  64. for(int i=1;i<=n;++i)
  65. {
  66. if(a[i][1]=='F') //F
  67. {
  68. //处理 循环变量
  69. if(vis[a[i][3]-'a']) { //如果出现过的话,ERR
  70. { puts("ERR");return;}
  71. } else {
  72. vis[a[i][3]-'a']=1; //vis数组++
  73. }
  74. //F的范围
  75. int j=5,x=0,y=0;
  76. if(a[i][5]=='n') {
  77. sta.push(node(a[i][3]-'a',i,0));//一定不可能是复杂度一定不可能是O(1)的
  78. //如果第一个数是n,那么只有第二个数也是n才能进入循环(复杂度O(1)),否则就直到弹栈为止
  79. if(a[i][7]!='n') { //只需要检查是否ERR即可
  80. if(check(i,i)) {
  81. puts("ERR");return;
  82. }
  83. }
  84. } else {
  85. while(a[i][j]>='0'&&a[i][j]<='9') {x=x*10+a[i][j]-'0';j++;} j++;//读入x
  86. if(a[i][j]=='n') {
  87. sta.push(node(a[i][3]-'a',i,1));
  88. js++;//如果第1个是数字第2个是n,复杂度++
  89. ans=max(ans,js); //更新最高复杂度
  90. }
  91. else {
  92. sta.push(node(a[i][3]-'a',i,0));
  93. while(a[i][j]>='0'&&a[i][j]<='9') {y=y*10+a[i][j]-'0';j++;} j++;
  94. //如果都是数字,分为可以进入和不可以进入
  95. if(x>y) {//不可以进//只需要检查是否ERR即可入
  96. if(check(i,i)) {
  97. puts("ERR");return;
  98. }
  99. }
  100. //可以进入就不管啦,复杂度O(1)
  101. }
  102. }
  103. } else {
  104. //处理E
  105. if(a[i][1]=='E') { //如果结束这个循环
  106. if(sta.empty()) { puts("ERR");return;}//没有对应的F,ERR
  107. vis[sta.top().zimu]=0;// 这个F的字母以后可以用了
  108. js-=sta.top().fzd;//这个复杂度也得--,所以要过程中取max
  109. sta.pop(); //在栈中删除
  110. }
  111. }
  112. }
  113. if(sta.size())
  114. puts("ERR");
  115. else if(ans==fuzadu)
  116. puts("Yes");
  117. else puts("No");
  118. }
  119. int main()
  120. {
  121. // freopen("a.in","r",stdin);
  122. int T;
  123. scanf("%d",&T);
  124. while(T--)
  125. solve();
  126. return 0;
  127. }

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. ORACLE 根据根节点查所有上层节点

    1.基本数据 SELECT * FROM TABLE_MUEN T ID         CODE                                           NAME     ...

  2. flask 小入门知识点 2018.12.19

    今天听得一脸懵逼,主要因为自己英文底子太差了 不耽误时间了,少总结下,开始复习... 代码: # -*- encoding: utf-8 -*- # 导入重定向模块 , url_for简易寻址跳转,j ...

  3. Ball---hdu5821(排序)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5821 题意:有n个盒子,每个盒子又一个值 a[i] 如果 a[i] 大于 0 说明盒子里面有 1 个颜 ...

  4. 在scrapy中使用mongodb管道

    pipelines.py import json from scrapy.conf import settings from pymongo import MongoClient class SunP ...

  5. HTTP API响应数据规范整理

    概述 本文档为本人对长期开发API接口所整理的经验总结,如有不完善或不合理的地方,望各位多提意见. 文档目的为规范服务器端API接口,便于服务器端与客户端代码重用.服务器端和客户端可根据实际所定义规范 ...

  6. 用lua扩展你的Nginx(整理)

    首先得声明.这不是我的原创,是在网上搜索到的一篇文章,原著是谁也搞不清楚了.按风格应该是属于章亦春的文章. 整理花了不少时间,所以就暂写成原创吧. 一. 概述 Nginx是一个高性能.支持高并发的,轻 ...

  7. POJ2983 Is the Information Reliable?

    http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=267#problem/B                        B -  ...

  8. 1025 PAT Ranking[排序][一般]

    1025 PAT Ranking (25)(25 分) Programming Ability Test (PAT) is organized by the College of Computer S ...

  9. PAT Product of Polynomials[一般]

    1009 Product of Polynomials (25)(25 分) This time, you are supposed to find A*B where A and B are two ...

  10. openstack 部署笔记--nova

    控制节点 配置用户与服务 $ . admin-openrc $ openstack user create --domain default --password-prompt nova $ open ...