欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【hdu 2087】剪花布条

程序员文章站 2022-06-04 15:39:32
...

今天去刷了一下前几届学长大一时的周赛题,主要收获是学了点string类的基本用法。

题目链接:传送门

剪花布条
Problem Description
一块花布条,里面有些图案,另有一块直接可用的小饰条,
里面也有一些图案。对于给定的花布条和小饰条,
计算一下能从花布条中尽可能剪出几块小饰条来呢?
 
Input
输入中含有一些数据,分别是成对出现的花布条和小饰条,
其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,
布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个
字符长。如果遇见#字符,则不再进行工作。
 
Output
输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,
那就老老实实输出0,每个结果之间应换行。
 

Sample Input
abcde a3
aaaaaa  aa
#

Sample Output
0
3

暴力AC代码:

#include <stdio.h>
#include <cstring>
#include <iostream>
#include <string>
#include <cmath>
#include <algorithm>
#include <cstdlib>
#include <queue>
using namespace std;
#define ll long long
char p[1005];
char q[1005];
int main()
{
  int ans, k;
  while (cin >> p)
  {
    if (p[0] == '#')
      break;
    cin >> q;
    ans = k = 0;
    for (int i = 0; i < strlen(p); i++)
    {
      k = 0;
      for (int j = 0; j < strlen(q); j++)
      {
        if (p[j + i] == q[j])
          k++;
        else
          break;
        if (k == strlen(q))
          ans++, i += strlen(q) - 1;
      }
    }
    cout << ans << endl;
  }
  return 0;
}

然后我看了一下别人发的题解,发现了一种KMP算法,但是十分的繁琐,另外使用比较多的方法就是用string类完成。
主要还是记录一下string类的一点函数和用法。

一.string.size()和string.length()作用完全一样,都是返回字符串的长度。
二.string.assign的用法
现有一个string类变量aa="HELLO WORLD !"
1.直接用一字符串a给另一字符串b赋值
如 b.assign(a);
2.用一个字符串a的子串给另一字符串b赋值
如 b.assign(a,2,7);(从2开始,往后7个字符)
3.用n个字符x给字符串b赋值
如 b.assign(10,‘Y’);

【hdu 2087】剪花布条
运行效果如下:
【hdu 2087】剪花布条
知道这些string类的基本用法后这题就显得十分简单,解法也很清晰,就是每次取出长度为"小饰条"长度的花布条与"小饰条"比较,是否一样。
AC代码如下:

#include <stdio.h>
#include <cstring>
#include <iostream>
#include <string>
#include <cmath>
#include <algorithm>
#include <cstdlib>
#include <queue>
#include <cstring>
using namespace std;
#define ll long long
int main()
{
  string a, b, c;
  while (cin >> a)
  {
    int ans = 0;
    if (a[0] == '#')
      break;
    cin >> b;
    int len = b.size();
    for (int i = 0; i <= a.size() - len; i++)
    {
      c.assign(a, i, len); //取出长度为len的花布条
      if (c == b)
      {
        ans++;
        i += len - 1;
      }
    }
    cout << ans << endl;
  }
  return 0;
}
相关标签: string类 HDUOJ