自认为是少有的复杂的代码

这题思想很简单,就是大模拟

对于for循环,一行读入4个字符串,然后分类讨论:

①:如果是一个正常的O(n),那么累计n的指数加1

②:如果是一个常数级别的,那么继续循环,但是不累计指数

③:如果这个循环是从n到常数,或大常数到小常数,那么这个循环及它内部的循环都不进,打好标记不要累计

④:至于如何防止变量的重复使用:将用过的变量放进栈里并打上标记,循环结束时出栈清标记即可

⑤:还要注意一些小细节:循环层数只计最深的一层,所以我们用一个累计变量cnt,每次结束循环考虑循环的情况:如果这个循环被累计了,cnt--,否则cnt不变,所以我们还要开一个栈,记录每个循环的情况(与存变量的栈同步使用即可)

剩下就好办了:

  1. #include <cstdio>
  2. #include <cmath>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <iostream>
  6. #include <algorithm>
  7. #include <queue>
  8. #include <stack>
  9. using namespace std;
  10. char s[];
  11. char s1[],s2[];
  12. char tt[];
  13. bool used[];
  14. int n;
  15. stack <char> Q;
  16. stack <int> M;
  17. int main()
  18. {
  19. scanf("%d",&n);
  20. while(n--)
  21. {
  22. int l;
  23. scanf("%d",&l);
  24. scanf("%s",tt);
  25. int flag=;
  26. int flag0=;
  27. int flag2=;
  28. int cnt=,maxcnt=;
  29. memset(used,,sizeof(used));
  30. while(!M.empty())
  31. {
  32. M.pop();
  33. Q.pop();
  34. }
  35. for(int i=;i<=l;i++)
  36. {
  37. scanf("%s",s);
  38. if(flag0)
  39. {
  40. if(s[]=='F')
  41. {
  42. scanf("%s",s);
  43. scanf("%s",s);
  44. scanf("%s",s);
  45. }
  46. continue;
  47. }
  48. if(s[]=='E')
  49. {
  50. if(!flag)
  51. {
  52. flag0=;
  53. continue;
  54. }else
  55. {
  56. char c=Q.top();
  57. used[c]=;
  58. Q.pop();
  59. flag--;
  60. int y=M.top();
  61. if(y==)
  62. {
  63. cnt--;
  64. }else if(y==)
  65. {
  66. flag2=;
  67. }
  68. M.pop();
  69. }
  70. }else
  71. {
  72. scanf("%s",s);
  73. if(used[s[]])
  74. {
  75. flag=;
  76. scanf("%s",s);
  77. scanf("%s",s);
  78. continue;
  79. }
  80. used[s[]]=;
  81. Q.push(s[]);
  82. scanf("%s",s1);
  83. scanf("%s",s2);
  84. flag++;
  85. if(s1[]-''<=&&s2[]-''<=&&s1[]-''>=&&s2[]-''>=)
  86. {
  87. int j=;
  88. int x=;
  89. while(s1[j]-''<=&&s1[j]-''>=)
  90. {
  91. x=x*+s1[j]-'';
  92. j++;
  93. }
  94. int y=;
  95. j=;
  96. while(s2[j]-''<=&&s2[j]-''>=)
  97. {
  98. y=y*+s2[j]-'';
  99. j++;
  100. }
  101. if(x>y)
  102. {
  103. flag2=;
  104. M.push();
  105. }else
  106. {
  107. M.push();
  108. }
  109. continue;
  110. }else if(s2[]-''<=&&s2[]-''>=)
  111. {
  112. M.push();
  113. flag2=;
  114. continue;
  115. }else
  116. {
  117. if(s2[]=='n'&&s1[]=='n')
  118. {
  119. M.push();
  120. continue;
  121. }
  122. if(!flag2)
  123. {
  124. cnt++;
  125. M.push();
  126. }else
  127. {
  128. M.push();
  129. }
  130. maxcnt=max(maxcnt,cnt);
  131. }
  132. }
  133. }
  134. if(flag)
  135. {
  136. flag0=;
  137. }
  138. if(flag0)
  139. {
  140. printf("ERR\n");
  141. continue;
  142. }else if(maxcnt==&&tt[]=='')
  143. {
  144. printf("Yes\n");
  145. continue;
  146. }else
  147. {
  148. int j=;
  149. int x=;
  150. while(tt[j]-''<=&&tt[j]-''>=)
  151. {
  152. x=x*+tt[j]-'';
  153. j++;
  154. }
  155. if(x==maxcnt)
  156. {
  157. printf("Yes\n");
  158. continue;
  159. }
  160. printf("No\n");
  161. continue;
  162. }
  163. }
  164. return ;
  165. }

noip 2017 时间复杂度的更多相关文章

  1. NOIP 2017 时间复杂度 (模拟)

    题目大意:略 傻了吧唧的我wa了好几次 我的模拟功底真的不咋地 linux下用gets会报错,我用的fgets #include <string> #include "stdio ...

  2. 「NOIP 2017」列队

    题目大意:给定一个 $n times m$ 的方阵,初始时第 $i$ 行第 $j$ 列的人的编号为 $(i-1) times m + j$,$q$ 次给出 $x,y$,让第 $x$ 行 $y$ 列的人 ...

  3. NOIP 2017 解题报告

    ---恢复内容开始--- NOIP 2017 的题真的很难啊,怪不得当年我这个萌新爆零了(当然现在也是萌新)越学越觉得自己什么都不会. 想要成为强者要把这些好题都弄懂弄透 至少现在6道题我都比较陌生 ...

  4. NOIP 2017 列队 - Splay - 树状数组

    题目传送门 传送点I 传送点II 题目大意 (家喻户晓的题目应该不需要大意) (我之前咋把NOIP 2017打成了NOIP 2018,好绝望) Solution 1 Splay 每行一颗Splay,没 ...

  5. 【游记】NOIP 2017

    时间:2017.11.11~2017.11.12 地点:广东省广州市第六中学 Day1 T1:看到题目,心想这种题目也能放在T1? 这个结论我之前遇到过至少3次,自己也简单证明过.初见是NOIP200 ...

  6. NOIP 2017 小凯的疑惑

    # NOIP 2017 小凯的疑惑 思路 a,b 互质 求最大不能表示出来的数k 则k与 a,b 互质 这里有一个结论:(网上有证明)不过我是打表找的规律 若 x,y(设x<y) 互质 则 : ...

  7. 历年真题 未完成(Noip 2008 - Noip 2017)

    Noip 2008 :全部 Noip 2009 :全部 Noip 2010 :AK Noip 2011 :AK Noip 2012 : Vigenère 密码,国王游戏,开车旅行 Noip 2013 ...

  8. 洛谷 P3951 NOIP 2017 小凯的疑惑

    洛谷 P3951 NOIP 2017 小凯的疑惑 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付 ...

  9. NOIP 2017 提高组 day1t2 时间复杂度

    P3952 时间复杂度 标签 NOIp提高组 2017 时空限制 1000ms / 128MB 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂 ...

随机推荐

  1. 用访问控制列表(ACL)实现包过滤

      用访问控制列表(ACL)实现包过滤 一.ACL概述 1.ACL(Access Control List,访问控制列表)是用来实现数据包识别功能的 2.ACL可以应用于诸多方面 a>.b包过滤 ...

  2. sql 各种常用函数

    1.stuff函数 替换制定字符串 stuff(,,'许嵩') 结果: 最帅的许嵩最帅的我 2.replace函数 select replace('蜀云泉真是帅啊','蜀云泉','许嵩') 结果: 许 ...

  3. golang 的时间格式化操作

    怎么做 简而言之 time.Now().Format("2006-01-02 15:04:05") 你将会获得如同 yyyy-MM-dd hh-mm-ss 这样的输出. 还可以 在 ...

  4. CM记录-Hadoop运维管理

    1.自动化运维--cloudera manager 2.手动运维 a.启动./start.all.sh,停止./stop-all.sh b.hdfs启动/停止:./start-dfs.sh   ./s ...

  5. URL基本结构

    先来简单说下URI.URL.URN这三个鬼东西. URI全称Uniform Resource Identifier,统一资源标识符 URL全称Uniform Resource Locator,统一资源 ...

  6. L1比L2更稀疏

    1. 简单列子: 一个损失函数L与参数x的关系表示为: 则 加上L2正则化,新的损失函数L为:(蓝线) 最优点在黄点处,x的绝对值减少了,但依然非零. 如果加上L1正则化,新的损失函数L为:(粉线) ...

  7. ms sqlserver2008r2 自动备份

    日常工作中利用SQL SQLSERVER 2008 的维护计划对数据库进行定期的备份,这样一方面可以对数据库进行备份保证数据安全另一方面也可以减轻对维护人员的负担. 一般对于WEB 服务器进 行维护都 ...

  8. C# print2flash3文件转化

    1.下载print2flash3 并且安装print2flash3 2.转换工具类 (1)需要导入using Print2Flash3; 这个程序集 using System; using Syste ...

  9. DSO windowed optimization 公式

    这里有一个细节,我想了很久才想明白,DSO 中的 residual 联系了两个关键帧之间的相对位姿,但是最终需要优化帧的绝对位姿,中间的导数怎么转换?这里使用的是李群.李代数中的Adjoint. 参考 ...

  10. WPF版公司的自动签到程序

    1.外包公司要求早上签到,就写了一个自动打卡程序. 2.一直都想写这个程序,可是一直没有思路,知道有个软件公司找我做自动答题程序,于是自动打卡程序才应运而生.未来可以将自动答题程序开源工大家查看. 3 ...