zoukankan      html  css  js  c++  java
  • 剪花布条 HDU

    今天做到了相关的题,感觉知识欠缺就想着写个总结加深一下记忆。

    首先是今天看到的题:

    一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。
    对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? 

    Input:

    输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,
    布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则不再进行工作。

    Output:

    输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就老老实实输出0,每个结果之间应换行。

    Sample Input:

    abcde a3
    aaaaaa  aa
    #

    Sample Output:

    0
    3


    这个题数据卡的不严,暴力可以很轻松地跑过去。
    以下是暴力的写法:

    #include<cstdio>
    #include<iostream> 
    #include<cmath> 
    #include<cstring> 
    using namespace std; 
    
    char a[1005]; 
    char b[1005];
     
    int main() 
    { 
    	while(scanf("%s",a+1))
    	{ 
    		if(a[1]=='#')break; 
    		int result=0; 
    		scanf("%s",b+1); 
    		int len1=strlen(a+1); 
    		int len2=strlen(b+1); 
    		for(int i=1 ; i<=(len1-len2+1) ; i++) 
    		{ 
    			int t=i; 
    			for(int j=1 ; j<=len2 ;) 
    			{ 
    				if(a[t]==b[j])  
    				{ 
    					t++; j++; 
    					if(j == len2+1) 
    					{ 
    						j=1; 
    						i=i+len2-1; 
    						result++; 
    						break; 
    					} 
    				} 
    				else 
    				{ 
    					j=1; 
    					break; 
    				}  
    			} 
    		} 
    		printf("%d
    ",result); 
    	} 
    	return 0; 
    } 
    

    不过正所谓暴力肯定不是我们的最终目标,所以我上网查了查发现还有很多方法

    一 :C语言库里有strstr()可以用。 需要头文件#include<cstring> || #include<string.h> 例如:strstr(s1,s2); 返回s2在s1中的第一个位置(有多个没法),返回类型是char *

    二:C++中的string类的find函数 例如: string str1 = "asdasd"; int a = str1.find("asd",0); 最终a = 0   这里返回类型为int,即下标。 find里的第二个参数是代表从第几(下标)开始找。

    三:Kmp算法,BM算法。

    这个比较麻烦,直接上大神传送门  点击打开链接

  • 相关阅读:
    事务传播机制,搞懂。
    洛谷 P1553 数字反转(升级版) 题解
    洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is Here 题解
    洛谷 P1055 ISBN号码 题解
    洛谷 P2141 珠心算测验 题解
    洛谷 P1047 校门外的树 题解
    洛谷 P1980 计数问题 题解
    洛谷 P1008 三连击 题解
    HDU 1013 题解
    HDU 1012 题解
  • 原文地址:https://www.cnblogs.com/vocaloid01/p/9514281.html
Copyright © 2011-2022 走看看