Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

网上各种AC代码各种错,只能说明数据弱,举例说明

Posted by lcystar at 2011-08-01 15:27:15 on Problem 2185 and last updated at 2011-08-01 15:28:03
网上各种AC代码各种错,只能说明数据弱,举例说明。希望能够加强数据
Input

2 8
ABCDEFAB
ABCDEABC
2 8
ABCDEFAB
AAAABAAA

Output

16
12
以下两个AC代码的来源的AC代码:
第一个代码来源:http://hi.baidu.com/%C1%D9%CA%B1%B1%B8%D3%C3%D5%CB%BA%C5/blog/item/4a047c6e417265f4421694e2.html(临时备用账号的空间),这个代码的输出如下:
12
12
第二个正确,第一个就过不了。
第二代码来源:http://hi.baidu.com/liwang112358/blog/item/828f99f19a04195a342acc44.html(LiWang112358的空间),我发现网上和这个代码的思路一样的代码非常多,这个代码过不了第二个样例,不过还能过第一个样例,输出如下:
16
16
正解思路:见博文:http://blog.sina.com.cn/s/blog_69c3f0410100tyjl.html
正解代码如下(zzuli):
#include<stdio.h>
#include<string.h>
char s[10010][80];
int next[10010];
int main()
{
	int i,j,x,y,r,c,f[80];
	char a[80];
	scanf("%d%d",&r,&c);
	for(i=0;i<c;i++)f[i]=0;
	for(i=0;i<r;i++){
		scanf("%s",s[i]);
		strcpy(a,s[i]);
		for(j=c-1;j>0;j--){
			a[j]=0;
			for(x=0,y=0;s[i][y];x++,y++){
				if(!a[x])x=0;
				if(a[x]!=s[i][y])break;
			}
			if(!s[i][y])f[j]++;
		}
	}
	for(i=0;i<c;i++)
		if(f[i]==r)break;
	x=i;
	for(i=0;i<r;i++)s[i][x]=0;
	next[0]=-1;
	for(i=1,j=-1;i<r;i++){
		while(j!=-1&&strcmp(s[j+1],s[i]))j=next[j];
		if(!strcmp(s[j+1],s[i]))j++;
		next[i]=j;
	}
	printf("%d\n",(r-1-next[r-1])*x);
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator