经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C » 查看文章
洛谷P3952 时间复杂度(模拟)
来源:cnblogs  作者:自为风月马前卒  时间:2018/10/31 9:05:21  对本文有异议

题意

题目链接

Sol

咕了一年的题解。。就是个模拟吧

考场上写的递归也是醉了。。。

感觉一年自己进步了不少啊。。面向数据编程的能力提高了不少

  1. #include<bits/stdc++.h>
  2. #define fi first
  3. #define se second
  4. #define MP make_pair
  5. using namespace std;
  6. const int MAXN = 101;
  7. int T, top = 0, now, mx, flag;
  8. pair<char, int> st[MAXN];// first 字符 second 是否算作复杂度 1 算 0不算
  9. void init() {
  10. top = 0;//已经用过哪些字符
  11. now = 0;//当前进入了几层循环
  12. mx = 0;//最大循环层数
  13. flag = 0;
  14. }
  15. int get(char *s) {
  16. int l = strlen(s + 1), x = 0;
  17. for(int i = 1; i <= l; i++) if(s[i] >= '0' && s[i] <= '9') x = x * 10 + s[i] - '0';
  18. return x;
  19. }
  20. char getopt() {
  21. char c = ' ';
  22. while(c != 'E' && c != 'F') c = getchar();
  23. return c == 'F' ? 1 : 0;// 1 enter 0 end
  24. }
  25. int readround() {//n = -1
  26. char c = ' '; int x = 0;
  27. while(c != 'n' && (c < '0' || c > '9')) c = getchar();
  28. if(c == 'n') return -1;
  29. while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
  30. return x;
  31. }
  32. int readbuf() {// 1 n 0常数 -1重名
  33. char c = getchar();
  34. while(c < 'a' || c > 'z') c = getchar();
  35. int bg = readround(), ed = readround();
  36. for(int i = 1; i <= top; i++) if(st[i].fi == c) return -1;
  37. if((bg != -1 && ed != -1 && bg > ed) || (bg == -1 && ed != -1)) {flag = 1, st[++top] = MP(' ', -1); return 0;}//不进入循环
  38. if(bg != -1 && ed == -1) {//非常数循环
  39. if(flag == 0) now++, mx = max(now, mx), st[++top] = MP(c, 1);
  40. else st[++top] = MP(c, 0);
  41. } else {
  42. st[++top] = MP(c, 0);
  43. }
  44. return 0;
  45. }
  46. int solve() {// 1 Yes 0 No -1 ERR
  47. int L, w = 0, GG = 0; char s[233];
  48. scanf("%d %s", &L, s + 1);
  49. if(s[3] == 'n') w = get(s + 1);
  50. for(int i = 1; i <= L; i++) {
  51. int opt = getopt();
  52. if(opt == 0) {
  53. if(top == 0) GG = -1;
  54. else {
  55. if(st[top].se == -1) flag = 0;
  56. if(st[top--].se == 1) now--;
  57. }
  58. } else {
  59. int tmp = readbuf();
  60. if(tmp == -1) GG = -1;
  61. }
  62. }
  63. if(GG == -1) return -1;
  64. if(top) return -1;
  65. else return mx == w;
  66. }
  67. int main() {
  68. cin >> T;
  69. while(T--) {
  70. init();
  71. int tmp = solve();
  72. if(tmp == 1) puts("Yes");
  73. else if(tmp == 0) puts("No");
  74. else puts("ERR");
  75. }
  76. return 0;
  77. }
  78. /*
  79. 1
  80. 2 O(n^1)
  81. F a n n
  82. E
  83. */
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号