麻烦强人修正一道vijos题(牛的RP)
发布网友
发布时间:2024-05-11 20:33
我来回答
共3个回答
热心网友
时间:2024-06-01 11:24
#include<iostream>
#include<string>
using namespace std;
main()
{
int i,j,n,m=0,s,k=1000000,g,a=0,b=0,c=0;
char x[400],z[]="reioxzsj",y[]="woc",w[400];
cin>>n;
for(i=1;i<=n;i++)
{
g=0;
cin>>x;
s=strlen(x);
if(strstr(x,z))
{
if(strstr(x,y)) a++;
for(j=0;j<s;j++)
{
if(x[j]=='r') a++;
if(x[j]=='p') b++;
if(x[j]=='p'&&x[j+1]=='r') c++;
}}
g=5*a+5*b+20*c;
if((s<k)&&(g>m))
{
k=s;
m=g;
for(j=0;j<s;j++)
w[j]=x[j];
}
}
for(i=0;i<k;i++)
cout<<w[i];
cout<<endl;
cout<<m;
return 0;
}
程序没什么我问题 就是strstr函数里出了问题
既然定义了string 何必要自己实现strstr函数呢?而且第二个功能也没有实现
热心网友
时间:2024-06-01 11:23
刚好试着用KMP算法编串匹配,这里就遇到题目了,不知道那个strstr()函数是不是用的KMP算法,还是自己编一个好了。 不知道程序对不对...
#include <iostream.h>
#include <string.h>
void KMP_init(char *t, int *flink)
{
int j, k = -1;
int lent = strlen(t);
flink[0] = -1;
for (j=0; j<lent-1; j++)
{
while ((k!=-1) && (t[j]!=t[k])) k = flink[k];
flink[j+1] = k+1;
k++;
}
}
int index(char *s, char *t, int *p)
{
int i, j = 0, tot = 0;
int *flink = new int[strlen(t)];
KMP_init(t, flink);
int lens = strlen(s);
int lent = strlen(t);
for (i=0; i<lens;)
{
while ((j!=-1) && (s[i]!=t[j])) j = flink[j];
j++;
i++;
if (j==lent)
{
p[tot] = i-j;
tot++;
i--;
j--;
j = flink[j];
}
}
delete[] flink;
return(tot);
}
int main()
{
int n, i, j;
int t[301];
char c[301], fc[301];
int tRP, maxRP=0, l;
char maxc[301];
cin>>n;
for (i=0; i<n; i++)
{
cin>>c;
l=strlen(c);
for (j=l-1; j>=0; j--)
fc[j]=c[l-j-1];
fc[l]='\0';
tRP=0;
if (index(fc,"jszxoier",t))
{
tRP+=index(fc,"cow",t)*5;
tRP+=index(fc,"r",t)*5;
tRP+=index(fc,"p",t)*5;
tRP+=index(fc,"rp",t)*20;
if ((tRP>maxRP) || ((tRP==maxRP) && (strlen(maxc)>strlen(c))))
{
maxRP=tRP;
for (j=0; j<l; j++)
maxc[j]=c[j];
maxc[l]='\0';
}
}
}
cout<<maxc<<endl;
cout<<maxRP<<endl;
return(0);
}
热心网友
时间:2024-06-01 11:20
输入格式 Input Format
第一行,一个数n(n<=3000)。
接下来的n行,每行一个字符串,长度<=300,数据保证存在RP牛。
输出格式 Output Format
共两行
第一行为RP牛的名字
第二行为RP牛的Rp值
样例输入 Sample Input
8
reioxzsjzmy
mmk
jwc
zxf
jwc
wangwei
xcy
yuhc
样例输出 Sample Output
reioxzsjzmy
5
#include<iostream>
#include<string.h>
using namespace std;
int strstr(char *s1,char*s2)
{
char *p1=s1,*p2=s2;
while(*p1)
{
if(*p1==*p2)
{
while(*p1&&*p2)
{
if(*p1==*p2)
{
p1++;
p2++;
}
else
{
p1=p1-(p2-s2)+1;
p2=s2;
break;
}
}
if(!*p2)
{
return 1;
}
}
p1++;
}
return 0;
}
main()
{
int i,j,n,m=0,s,k=1000000,g,a=0,b=0,c=0;
char x[400],z[]="reioxzsj",y[]="woc",w[400];
cin>>n;
for(i=1;i<=n;i++)
{
g=0;
cin>>x;
s=strlen(x);
if(strstr(x,z))
{
if(strstr(x,y)) a++;
for(j=0;j<s;j++)
{
if(x[j]=='r') a++;
if(x[j]=='p') b++;
if(x[j]=='p'&&x[j+1]=='r') c++;
}}
g=5*a+5*b+20*c;
if((s<k)&&(g>m))
{
k=s;
m=g;
for(j=0;j<s;j++)
w[j]=x[j];
}
}
for(i=0;i<k;i++)
cout<<w[i];
cout<<endl;
cout<<m;
}
这也太牛了吧