POJ 1936 All in All 匹配, 水题 难度:0

题目

http://poj.org/problem?id=1936

题意

多组数据,每组数据有两个字符串A,B,求A是否是B的子串。(注意是子串,也就是不必在B中连续)

思路

设置计数器cnt为当前已匹配A的长度,明显在扫描B的过程中只需要记住cnt这一个状态。

扫描B,每次与A[cnt]匹配就将计数器增加1,cnt与A的长度一致时A就是B的子串。

感想

这道题也许可以用更复杂的方法。

代码

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <iostream>
 5 #include <sstream>
 6 using namespace std;
 7 typedef long long ll;
 8 const int maxn = 1e6 + 6;
 9 int nxt[maxn];
10 char pat[maxn];
11 char maz[maxn];
12
13 bool solve(){
14     int cnt = 0;
15     for(int i = 0;maz[i];i++){
16         if(maz[i] == pat[cnt])cnt++;
17         if(pat[cnt] == 0)return true;
18     }
19     return false;
20 }
21
22 int main(){
23 #ifdef LOCAL
24     freopen("input.txt","r",stdin);
25 #endif // LOCAL
26     for(int i = 0;scanf("%s%s",pat,maz)==2;i++){
27         bool ans = solve();
28         if(ans){
29             puts("Yes");
30         }else{
31             puts("No");
32         }
33     }
34
35     return 0;
36 }

时间: 2024-10-08 20:04:38

POJ 1936 All in All 匹配, 水题 难度:0的相关文章

POJ3126 Prime Path bfs, 水题 难度:0

题目 http://poj.org/problem?id=3126 题意 多组数据,每组数据有一个起点四位数s, 要变为终点四位数e, 此处s和e都是大于1000的质数,现在要找一个最短的路径把s变为e,每步可以做如下操作,把当前的s中的四位数上的某一位改变,比如1009可以变为2009,1008,1309,1049,然后检验结果是否为大于1000的质数,如果是,那就可以把s变为这个数. 思路 质数明显需要先处理出来,然后采用bfs获取结果即可. 感想 下次需要先计算空间复杂度, 1e8的空间复

POJ 2545+2591+2247+1338简单水题

[题意简述]:就是有这样的一个序列,就拿当p1 = 2,p2 = 3, p3 = 5,来举例,由这三个数为基准组成的序列是: 2,3,4,5,6,8,9,10,12--现在给你这个序列数组的下标,让你求得这个数组中,这个下标里的数是多少. [分析]:2,3,4,5,6,8,9,10,12--这个序列式由2,3,5这三个数生成的,具体如何生成,就是: 详见代码: 这里以POJ2545为例: //弄清其中的逻辑关系,可以从最简单的2,3,5试着做起! #include<iostream> #inc

POJ 3069 Saruman&#39;s Army(水题,简单的贪心)

[题意简述]:在一条直线上有N个点,每个点的位置分别是Xi,现从这N个点中选择若干个点给他们加上标记.使得,对每个点而言,在其距离为R的范围内都有带有标记的店,问   至少   要有几个被标记的点. [分析]:我们可以对这个点的序列简单的排序,按照从左到右,从小到大,然后对于最左边的这一个点,我们计算从这个点开始加上这个距离R可以到达的最远的但又小于这个距离R的点是哪一个,然后以这个点为基准,重复上述的过程,最终计算出点的个数. 详见代码: //244K 63Ms #include<iostre

POJ 2081 Recaman&#39;s Sequence(水题)

[题意简述]:这个题目描述很短,也很简单.不再赘述. [分析]:只需再加一个判别这个数是否出现的数组即可,注意这个数组的范围! // 3388K 0Ms #include<iostream> using namespace std; #define Max 500001 int a[Max]; bool b[10000000] = {false}; // b的数据范围是可以试出来的- void init() { a[0] = 0; b[0] = true; for(int m = 1;m<

Goldbach&#39;s Conjecture POJ - 2262 线性欧拉筛水题 哥德巴赫猜想

题意 哥德巴赫猜想:任一大于2的数都可以分为两个质数之和 给一个n 分成两个质数之和 线行筛打表即可 可以拿一个数组当桶标记一下a[i]  i这个数是不是素数  在线性筛后面加个装桶循环即可 #include<cstdio> #include<cstring> using namespace std; bool Is_Primes[1000005]; int Primes[1000005]; int cnt; void Prime(int n){ cnt=0; memset(Is_

poj 3103 Cutting a Block 模拟水题

水题 #include <iostream> using namespace std; int main() { int x,y,z,n; scanf("%d%d%d%d",&x,&y,&z,&n); for(int i=0;i<n;++i) printf("0 0 %.8lf %d %d %.8lf\n",(z*1.0/n)*i,x,y,(z*1.0/n)*(i+1)); return 0; } 版权声明:本文为博

POJ 2070 Filling Out the Team(水题)

[题目简述]:给出了球场上WideReceiver,Lineman,Quarterback三个位置所需人员的最低属性(speed,weight ,strength)要求,输入:三个数据,为别为speed.weight.strength,若输入的速度低于或等于球场上位置的要求,体重和力量大于或等于球场上位置的要求,则输出相应的符合位置,若有多个符合的位置,中间用一个空格隔开输出,如没有符合位置,则输出 No positions. [分析]:很简单,但是,对于我的代码还是有个疑问,就是拿题目中前两个

Selecting Courses POJ - 2239(我是沙雕吧 按时间点建边 || 匹配水题)

呃呃呃呃呃 把每个课给了INF个容量....我是沙雕把....emm....这题就是做着玩...呃呃呃别当真.... #include <iostream> #include <cstdio> #include <sstream> #include <cstring> #include <map> #include <cctype> #include <set> #include <vector> #inclu

POJ 2239 Selecting Course 二分图匹配(水)

http://poj.org/problem?id=2239 题意:总共7天,每天有12个教室使用,每门课有(t,pi,qi) 表示该门课每周开t次在第qi天,第pi间教室i=1..t 总共n门课 n<=300,问最多能选多少种不同的课程? 左边点为课程 右边点为(p,q) 把(p,q)看成排列中的序数 化成整数(p-1)*12+q.求二分图的最大匹配即可 复杂度为O(nm) #include <iostream> #include <cstring> #include &l