Problem Description

现在有一些被简单压缩的字符串,例如:a[120]代表120个a。对于字符串acb[3]d[5]e相对于acbbbddddde

现在给你两个字符串cString, nString.一个是被压缩过的字符串,另一个没有被压缩。

求nString是否为cString的子串,如果是输出True,否则输出False.cString的长度clen的范围是0<clen<1000, nString的长度的nlen的范围是0<nlen<1000;cString只包含小写26个字母,[],数字(大于0小于10^9)。nString只包含小写26个字母。

 Sample Input

acb[3]d[5]e bd

 Sample Output

True

 Source

FOJ有奖月赛-2015年03月

  1. #include <cstdio>
  2. #include <cmath>
  3. #include <cstring>
  4. #include <ctime>
  5. #include <iostream>
  6. #include <algorithm>
  7. #include <set>
  8. #include <vector>
  9. #include <queue>
  10. #include <typeinfo>
  11. #include <map>
  12. #include <stack>
  13. typedef long long ll;
  14. #define inf 0x7fffffff
  15. using namespace std;
  16. inline ll read()
  17. {
  18. ll x=,f=;
  19. char ch=getchar();
  20. while(ch<''||ch>'')
  21. {
  22. if(ch=='-')f=-;
  23. ch=getchar();
  24. }
  25. while(ch>=''&&ch<='')
  26. {
  27. x=x*+ch-'';
  28. ch=getchar();
  29. }
  30. return x*f;
  31. }
  32.  
  33. //**************************************************************************************
  34.  
  35. int main()
  36. {
  37. char a[];
  38. char b[];
  39. char aa[];
  40. char bb[];
  41. int bna[];
  42. int ana[];
  43. while(scanf("%s%s",a,b)!=EOF)
  44. {
  45. int l=strlen(b);
  46. int k=;
  47. int now=;
  48. bb[++k]=b[];
  49. bna[k]=;
  50. for(int i=; i<l; i++)
  51. {
  52. if(b[i]!=b[i-])
  53. {
  54. now=;
  55. bb[++k]=b[i];
  56. bna[k]=;
  57. }
  58. else
  59. {
  60. now++;
  61. bna[k]=now;
  62. }
  63. }
  64. int bk=k;
  65. k=;
  66. aa[k]='';
  67. int la=strlen(a);
  68. for(int i=; i<la; i++)
  69. {
  70. if(a[i]>='a'&&a[i]<='z')
  71. {
  72. aa[++k]=a[i];
  73. ana[k]=;
  74. }
  75. else if(a[i]=='[')
  76. {
  77. int sum=;
  78. i++;
  79. while(a[i]!=']')
  80. {
  81. sum*=;
  82. sum+=a[i]-'';
  83. i++;
  84. }
  85. ana[k]=sum;
  86. if(aa[k]==aa[k-])
  87. {
  88. // if(k==5)printf("%c %d\n",aa[k],ana[k]);
  89. ana[k-]+=ana[k];
  90. k--;
  91. }
  92. }
  93.  
  94. }
  95. int ak=k;
  96.  
  97. if(bk>ak)
  98. {
  99. printf("False\n");
  100. continue;
  101. }
  102. int das=;
  103. for(int i=; i<=ak-bk+; i++)
  104. {
  105. bool flag=true;
  106. for(int j=i; j<i+bk; j++)
  107. {
  108. if(j==i||j==i+bk-)
  109. {
  110. if(aa[j]!=bb[j-i+])
  111. {
  112.  
  113. flag=false;
  114. break;
  115. }
  116.  
  117. }
  118. else
  119. {
  120. if(aa[j]!=bb[j-i+]||ana[j]!=bna[j-i+])
  121. {
  122. flag=false;
  123. break;
  124. }
  125. }
  126. }
  127.  
  128. if(flag)
  129. {
  130. printf("True\n");
  131. das=;
  132. break;
  133. }
  134. }
  135. if(!das)
  136. printf("False\n");
  137. }
  138.  
  139. return ;
  140. }

FZU 2183 字符串处理的更多相关文章

  1. FZU 2137 奇异字符串 后缀树组+RMQ

    题目连接:http://acm.fzu.edu.cn/problem.php?pid=2137 题解: 枚举x位置,向左右延伸计算答案 如何计算答案:对字符串建立SA,那么对于想双延伸的长度L,假如有 ...

  2. FZU 2218 Simple String Problem(简单字符串问题)

    Description 题目描述 Recently, you have found your interest in string theory. Here is an interesting que ...

  3. fzu 1913 Easy Comparison(字符串)

    题目链接:fzu 1913 Easy Comparison 题目大意:给出一个字符串,计算与它按照字典序排序排列后的字符串有多少个位置不同. 解题思路:水体,sort一下,然后遍历一遍就好. #inc ...

  4. I - Magic FZU - 2280 (字符串hash)

    题目链接: I - Magic FZU - 2280 学习链接: FZU - 2280 I - Magic 题目大意: 给你nn个字符串,每个字符串有一个值ww,有qq次询问,一共两种操作:一是“1, ...

  5. FZU 2122 又见LKity【字符串/正难则反/KMP/把一个字符串中某个部分替换为另一个部分】

    嗨!大家好,在TempleRun中大家都认识我了吧.我是又笨又穷的猫猫LKity.很高兴这次又与各位FZU的ACMer见面了.最近见到FZU的各位ACMer都在刻苦地集训,整天在日光浴中闲得发慌的我压 ...

  6. FZU 2027 单词问题 map标记字符串典型问题

    题目链接:单词问题 找一个字符串里的所有单词,重复的只输出一次.关于map函数key值是字符串的问题一直比较含糊... 挣扎了一番,大概是,map的key值是char型数组的时候,标记的是地址,于是有 ...

  7. FZU 2280 Magic(字符串Hash)题解

    题意:给你n个字符串,每个字符串有一个值w,有q次询问,一共两种操作:一是“1 x y”表示把第x个串的w变为y:二是“2 x”,输出第x个串能放几次魔法.放魔法的条件是这样:用串x放魔法,如果在1~ ...

  8. FZU ICPC 2020 寒假训练 6 —— 字符串处理

    P1603 斯诺登的密码 题目描述 2013年X月X日,俄罗斯办理了斯诺登的护照,于是他混迹于一架开往委内瑞拉的飞机.但是,这件事情太不周密了,因为FBI的间谍早已获悉他的具体位置--但这不是最重要的 ...

  9. FZU 1912 Divisibility by Thirty-six(整除问题+字符串维护+贪心)

    这个整除36的与整除45的完全一样,就是被4整除的有点多,但都是两位数,所以枚举后面两位就可以了. #include <stdio.h> #include <string.h> ...

随机推荐

  1. 获取JDBC中的ResultSet的记录的条数

    方法一:利用ResultSet的getRow方法来获得ResultSet的总行数 Java代码 ResultSet rs; rs.last(); //移到最后一行 int rowCount = rs. ...

  2. c# 解析JSON的几种办法(转载)

    对比 .NET下几种常见的解析JSON方法 主要类 命名空间 限制 内建LINQ支持 DataContractJsonSerializer System.Runtime.Serialization.J ...

  3. 运用加密技术保护Java源代码/定制ClassLoader

    为什么要加密? 对于传统的C或C++之类的语言来说,要在Web上保护源代码是很容易的,只要不发布它就可以.遗憾的是,Java程序的源代码很容易被别人偷看.只要有一个反编译器,任何人都可以分析别人的代码 ...

  4. 根据ID获取CEdit的句柄实例

    MyApp.h和MyApp.cpp #ifndef MY_APP_H_ #define MY_APP_H_ #include <afxwin.h> class CMyApp:public ...

  5. 字符串模拟赛T2

    // source code from laekov for c0x17 #define PRID "fkqh" #include <cstdio> #include ...

  6. 物理学家的LOGO

    原文选自Inside the Perimeter 阿那克西曼德(c. 610-546 BCE) 古希腊人,被认为是史上第一位物理学家,是有记录的认为世界按一定规律运行的第一人,做科学实验第一人,发明了 ...

  7. 小白科普之JavaScript的BOM模型

    一.什么是BOM 1. BOM是browser object model的缩写,简称浏览器对象模型: 2. BOM提供了独立于内容而与浏览器窗口进行交互的对象,描述了与浏览器进行交互的方法和接口: 3 ...

  8. 为win7添加ubuntu的启动引导项

    利用MBRFix删除ubuntu的开机引导界面,恢复成win7引导之后,为win7添加ubuntu的启动引导项: 直接利用EasyBCD添加一个Grub2的引导项即可 参考:http://mathis ...

  9. Eclipse 项目红色叹号:Build Path Problem

    Description Resource Path Location TypeA cycle was detected in the build path of project 'shgl-categ ...

  10. 让Delphi的DataSnap发挥最大效率

    让Delphi的DataSnap发挥最大效率 让Delphi的DataSnap发挥最大效率 一个DataSnap的应用程序由两个层组成: DataSnap服务器,它有一个带有一个或者更多DataSet ...