⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prefix.cpp

📁 USACO chapter two.Useful for beginners.
💻 CPP
字号:
/*
ID: chenkai4
PROG: prefix
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
string things[300];int tl[300];
int thingsnum=1;
bool f[200001]={0};int minSlength=999,maxSlength=0;
char fuck[200001];
char tfuck[100];
int answer=0;
string num="";
#define MAX(A,B) (A>B?A:B)
#define MIN(A,B) (A<B?A:B)
int main()
{
	char t;
	freopen("prefix.in","r",stdin);
	freopen("prefix.out","w",stdout);
	while(true)
	{
		scanf("%c",&t);
		if(t==' '||t=='\n')
		{
			tl[thingsnum]=things[thingsnum].length();
			minSlength = MIN(minSlength,tl[thingsnum]);
			maxSlength = MAX(maxSlength,tl[thingsnum]);
			thingsnum++;
		}
		else if(t<='Z'&&t>='A')
			things[thingsnum]+=t;
		else if(t=='.')
		{thingsnum--;gets(tfuck);break;}
		
	}
	while(gets(tfuck)!=NULL)
		for(int a=1;a<=strlen(tfuck);a++)
			num+=tfuck[a-1];
	int l = num.length();bool tcount;
	f[0]=true;
	for(int a=1;a<=l;a++)
	{
		tcount=false;
		for(int b=a-1;b>=MAX(a-maxSlength,0);b--)
			tcount=tcount||f[b];
		if(!tcount)
			break;
		for(int c=1;c<=thingsnum;c++)
			if(((a-tl[c])>=0)&&f[a-tl[c]])
			{
				tcount=true;
				if(num.substr(a-tl[c],tl[c])==things[c])
				{
					f[a]=true;
					answer=a;
					break;
				}
			}
	}
	printf("%d\n",answer);
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -