终于用horspool算法把题目做出来了,可惜那个系统却说超时了,真想不能,有这么好的算法,还超时。
2010-04-14 21:51
309 查看
//最贵的贝壳
#include<iostream>
#include<fstream>
#include<cstring>
#define MAXN 1020
#define MAXM 120
using namespace std;
typedef struct
{
int data[MAXN];
char cs[MAXN];
}cost;
int *b_table(char pat[],int p_size)
{
static int word_tab[130];
int i_size=p_size;
for(int i=0;i<128;i++)
{
word_tab[i]=p_size;
}
i_size--;
for(int i=0;i!=p_size-1;i++)
{
word_tab[(int)pat[i]]=i_size;
i_size--;
}
// cout<<i_size<<endl;
return word_tab;
}
void pipei(char text[],char pat[],int &count,int t_size,int p_size)
{
// int t_size=strlen(text);
// int p_size=strlen(pat);
int i=p_size-1;
// cout<<i<<endl;
int *table=b_table(pat,p_size);
// cout<<table[1]<<endl;
int num[100];
int j=0;
while(i<t_size)//==
{
int mat_i=0;
while(mat_i<p_size&&text[i-mat_i]==pat[p_size-mat_i-1])
{
mat_i++;
}
if(mat_i==p_size)
{
num[j]=i-p_size+1;
// cout<<num[j]<<" ";
j++;
i++;
}
else
{
i+=table[(int)text[i]];
}
}
j--;
count=num[j];
}
int main()
{
// char text[100]="12345566777891234123789 =789 23451234789 7899";
// char pat[10]={'7','8','9'};
//ifstream cin("bei.in");
int cot;
char love[100];
int n;
cost cost;
int sum=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>cost.data[i];
}
for(int i=0;i<n;i++)
{
cin>>cost.cs[i];
}
// cout<<cost.cs[0]<<endl;
int m;
cin>>m;
int i;
for( i=0;i<m;i++)
{
cin>>love[i];
}
// cout<<m<<endl;
// int count=0;
// int c_len=strlen(cost.cs);
// int l_len=strlen(love);
// cout<<c_len<<endl<<l_len<<endl;
// cout<<n<<" "<<m<<endl;
pipei(cost.cs,love,cot,n,m);//text,pat,count);//
// cout<<"|"<<cot<<endl;
for(int i=0;i<m;i++)
{
sum+=cost.data[cot];
cot++;
}
if(!cot)
{
return -1;
cout<<"error"<<endl;
}
else
{
cout<<sum<<endl;//sum<<endl;
return 0;
}
}
bei.in:
23
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
ILOVEUIDONOTLOVEUILOVEU
5
LOVEU
#include<iostream>
#include<fstream>
#include<cstring>
#define MAXN 1020
#define MAXM 120
using namespace std;
typedef struct
{
int data[MAXN];
char cs[MAXN];
}cost;
int *b_table(char pat[],int p_size)
{
static int word_tab[130];
int i_size=p_size;
for(int i=0;i<128;i++)
{
word_tab[i]=p_size;
}
i_size--;
for(int i=0;i!=p_size-1;i++)
{
word_tab[(int)pat[i]]=i_size;
i_size--;
}
// cout<<i_size<<endl;
return word_tab;
}
void pipei(char text[],char pat[],int &count,int t_size,int p_size)
{
// int t_size=strlen(text);
// int p_size=strlen(pat);
int i=p_size-1;
// cout<<i<<endl;
int *table=b_table(pat,p_size);
// cout<<table[1]<<endl;
int num[100];
int j=0;
while(i<t_size)//==
{
int mat_i=0;
while(mat_i<p_size&&text[i-mat_i]==pat[p_size-mat_i-1])
{
mat_i++;
}
if(mat_i==p_size)
{
num[j]=i-p_size+1;
// cout<<num[j]<<" ";
j++;
i++;
}
else
{
i+=table[(int)text[i]];
}
}
j--;
count=num[j];
}
int main()
{
// char text[100]="12345566777891234123789 =789 23451234789 7899";
// char pat[10]={'7','8','9'};
//ifstream cin("bei.in");
int cot;
char love[100];
int n;
cost cost;
int sum=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>cost.data[i];
}
for(int i=0;i<n;i++)
{
cin>>cost.cs[i];
}
// cout<<cost.cs[0]<<endl;
int m;
cin>>m;
int i;
for( i=0;i<m;i++)
{
cin>>love[i];
}
// cout<<m<<endl;
// int count=0;
// int c_len=strlen(cost.cs);
// int l_len=strlen(love);
// cout<<c_len<<endl<<l_len<<endl;
// cout<<n<<" "<<m<<endl;
pipei(cost.cs,love,cot,n,m);//text,pat,count);//
// cout<<"|"<<cot<<endl;
for(int i=0;i<m;i++)
{
sum+=cost.data[cot];
cot++;
}
if(!cot)
{
return -1;
cout<<"error"<<endl;
}
else
{
cout<<sum<<endl;//sum<<endl;
return 0;
}
}
bei.in:
23
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
ILOVEUIDONOTLOVEUILOVEU
5
LOVEU
相关文章推荐
- 最近终于把冰壶检测出来了用了那个haar的算法,下面总结一下bug是如何修复的
- 我的vista系统在公司网络总是超时,能浏览web页,不能下载,也不能上传!
- Interleaving String 一个月前没做出来的题目,闷了三天终于闷出来了
- 【人工智能】未来企业建设AI需三大平台;仅靠算法不能落地智能,企业需要AI核心系统
- C# delegate 学习 (练这么久终于悟出来点东东了,继续加油! ^_^)
- 系统分析师成绩终于出来了
- 分布式系统的Raft算法——在失联阶段这个老Leader的任何更新都不能算commit,都回滚,接受新的Leader的新的更新 意味着还是可能丢数据!!!
- 算法题目---不能被继承的类
- 十分棘手的问题,使用vs2005在文件系统机制下开发出来的web程序,配置到iis就不能正常运行?
- 终于把JAVA的SM2算法搞出来了!!!!!!!!!!!!!!!!!!!!!
- ABAP源代码下载-可惜不能把报表、结构、samrtforms导出来
- Linux中的TAB按一次不能出来命令,而按两次能出来所有那个首字母的词?
- 数据挖掘分类数据挖掘中的经典算法(一)汇总--谁说做系统的就不能研究数据挖掘?
- 夏新N800不能正常启动了,只显示夏新那个开机界面!不能进入系统
- VS2010最大的硬伤,编译出来的程序不能在XP SP2以下的系统运行
- 关于快速排序算法(一个90%的人都不懂其原理、99.9%的人都不能正常写出来的算法.)
- 刚发现了一个问题,关于vs2005 datagridview的,我发现在设计行标头的HeaderCell.Value的时候要是设置RowTemplate.Height 的值>= 17则行标头的那个黑三角就显示出来了,要是小于17就不能显示了,想问问大家,是怎么回事?
- c#扩展SPRING,配置里有不存在的业务系统xml导致不能启动问题,把配置文件里有重复的服务ID找出来并写入到日志
- 腾讯2017年实习生编程题目(第二题)----2.算法基础-字符移位 小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。
- 【算法题】题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)