记录编号 327744 评测结果 AAAAAAAAAA
题目名称 [NOIP 2011]统计单词数 最终得分 100
用户昵称 GravatarHzoi_chairman 是否通过 通过
代码语言 C++ 运行时间 0.384 s
提交时间 2016-10-22 20:54:53 内存使用 0.28 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib> 
using namespace std;
int read()
{
	int x,f=1;
	char ch;
	while(ch=getchar(),!isdigit(ch))if(ch=='-')f=-1;
	x=ch-48;
	while(ch=getchar(),isdigit(ch))x=x*10+ch-48;
	return x*f;
}
void write(int x)
{
	if(x<0)putchar('-'),x=-x;
	int cnt=0;char ch[50];
	while(ch[++cnt]=x%10+48,x/=10);
	while(putchar(ch[cnt]),--cnt);
	putchar(' ');
}
#define maxn 1000100
string s1,s2;
int f[20];
int main()
{
	freopen("stat.in","r",stdin);
	freopen("stat.out","w",stdout);
	cin>>s1;getline(cin,s2);
	getline(cin,s2);
	int n=s1.length(),m=s2.length();
	if(s1[0]>90)s1[0]-=32;//注意判断一下0 
	for(int i=1;i<n;i++)
	{
		if(s1[i]>90)s1[i]-=32;
		int j=f[i];
		while(j&&s1[i]!=s1[j])j=f[j];
		if(s1[i]==s1[j])f[i+1]=j+1;
		else f[i+1]=0;
	}
	int cnt=0,beginpos=-1;
	for(int k=0;k<m;k++)
	{
		if(s2[k]!=' '&&k!=0)continue;//注意需要整个单词都匹配 
		int i,pos;
		if(s2[k]==' ')pos=i=k+1;
		else pos=i=k;
		int j=0;
		for(;s2[i]!=' '&&i<m;i++)
		{
			if(s2[i]>90)s2[i]-=32;
			while(j&&s1[j]!=s2[i])j=f[j];
			
			if(s1[j]==s2[i])j++;//cout<<i<<' '<<j<<' '<<pos<<' '<<k<<' '<<s2[i]<<' '<<s1[j]<<endl;
			if(j==n)
			{
				if(s2[i+1]==' ')
				{
					cnt++;
					if(beginpos==-1)beginpos=i-n+1;
				}
				break;
			}if(i-pos!=j-1)break;
		}
	}
	if(cnt)write(cnt),write(beginpos);
	else puts("-1");
//	system("pause");
}