杭电ACM 2087
2016-07-24 21:08
197 查看
剪花布条
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 15566 Accepted Submission(s): 9861
[align=left]Problem Description[/align]
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?
[align=left]Input[/align]
输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则不再进行工作。
[align=left]Output[/align]
输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就老老实实输出0,每个结果之间应换行。
[align=left]Sample Input[/align]
abcde a3
aaaaaa aa
#
[align=left]Sample Output[/align]
0
3
解题思路:刚开始看完题目觉得好简单的,打代码的时候才发现有点坑。原来以为 i 只需要一直 i++ 接着 和 s 判断即可,后来发现 str 中间没找到 s字符串时并不能这样接着判断,而是要像我下面代码的绿色部分一样,从判断 s 字符串的上一轮的 i + 1 开始继续与 s 比较。
#include<iostream> #include<string> using namespace std; int main() { string str,s; int i,j,count,temp; bool flag; while(cin>>str && str[0] != '#') { cin>>s; count = 0; for (i = 0; i < str.length();) { flag = true; temp = i; for (j = 0; j < s.length(); j++) { if(str[i] != s[j]){flag = false;break;} <span style="color:#ff0000;">i++;</span> } if(flag){count++;} else {<span style="color:#009900;">i = temp + 1;</span>} } cout<<count<<endl; } return 0; }
相关文章推荐
- Java源码-简单手绘程序
- POJ-3270 Cow Sorting
- git diff获取差异文件中文乱码的解决办法
- php生成艺术签名 下
- 写给刚选择软件工程的你
- Linux makefile 教程 非常详细,且易懂
- Android 事件总线OTTO用法快速入门
- JAVA实现观察者模式
- hiho 40 ->三分·三分求极值
- Fedora 24 安装过程 (win10双系统)
- C# 多线程调用控件
- 以写代学:python 格式化操作符
- 第三章:linear models for regression
- mysql慢查询
- POJ 1035 Spell checker
- 随机数math包 switch 的用法 笔记
- 博客开篇
- 对多维数组的理解
- jquery mobile常用的data-role类型 data-icon data-iconpos
- c++23、C++中类的交叉引用