FZU 1481 环串

来源:互联网 发布:马哥2014linux视频 编辑:程序博客网 时间:2024/06/03 21:49
G - 环串
Time Limit:1000MS    Memory Limit:32768KB    64bit IO Format:%I64d & %I64u
SubmitStatusPracticeFZU 1481

Description

环串是一个首尾相接的串。例如,串abcabcxyzaxcaxcaxc 与串cabcxyzaxcaxcaxcab和xcaxcaxcabcabcxyza 是相同的环串。同一个环串可有多种不同的表示。

请编写一个程序计算在一个环串列表中有多少环串与一个已知的环串是表示相同的串。

Input

本题有多组输入数据,你必须处理到EOF为止

每组输入数据第一行有1个字符串。第二行有一个整数n(1<=n<=5000)。接下来n行每行有1个字符串。所有的字符串都是由不超过200个的小写字母组成

Output

输出与每组数据第一行字符串相同的环串个数。每组输入数据输出占一行

Sample Input

abcabcxyzaxcaxcaxc3xcaxcaxcabcabcxyzacabcxyzaxcaxcaxcabcabcxyzaxcaxcaxca

Sample Output

2解题报告:暴力法一个一个字符进行比较就行。  注意一个循环取字符串 s[i%len],len为字符串s的长度code:
#include<iostream>#include<algorithm>#include<stdio.h>#include<queue>#include<math.h>#include<string.h>#include<stdlib.h>using namespace std;typedef long long ll;int main(){   // freopen("input.txt","r",stdin);    int n;    char s[205];    while(~scanf("%s",s)){        int len=strlen(s),sum=0;        scanf("%d",&n);        char ch[205];        for(int i=0;i<n;i++){            scanf("%s",ch);            int m=strlen(ch);            if(len!=m)                continue;            for(int i=0;i<len;i++){                int j=0,k=i;                while(j<m&&s[k%len]==ch[j]){                    k++;                    j++;                }                if(j==m){                    sum++;                    break;                }            }        }        printf("%d\n",sum);    }    return 0;}



0 0
原创粉丝点击