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

类似的程序怎么超时了呢?

Posted by format_scut at 2006-12-21 19:31:02 on Problem 1171
In Reply To:为什么会Runtime Error呢?我的数组已经开的够大的了啊! Posted by:zhujie at 2006-03-10 15:36:48
#include<stdio.h>
#include<string.h>

char value[26]={2,5,4,4,1,6,5,5,1,7,6,3,5,2,3,5,7,2,1,2,4,6,6,7,5,7};
char len1,len2;
int ok=0;
char str1[20],str2[20];	
int bit[26],bit1[26];

int right(char str2[]){
	int i;

	if (len2>len1) return 0;
	for (i=0;i<26;i++)
		bit1[i]=bit[i];
	for (i=0;i<len2;i++)
		if (bit1[str2[i]-'a']==0)
			return 0;
		else
			bit1[str2[i]-'a']--;

	if (len1==len2)
		ok=1;
	return 1;
}

int solve(char str2[]){
	int sum=0;
	int i;

	for (i=0;i<len2;i++){
		sum=sum+value[str2[i]-'a'];
	}
	return sum;
}

void main(){
	char st[40000][10];
	int score,res=0;
	int k=0;
	int i,j;
	
	scanf("%s",str1);
	len1=strlen(str1);
	for (i=0;i<26;i++)
		bit[i]=0;
	for (i=0;i<len1;i++)
		bit[str1[i]-'a']++;


	scanf("%s",str2);
	while(strcmp(str2,".")!=0){
		if (ok){
			scanf("%s",str2);
			continue;
		}
		len2=strlen(str2);
		if (right(str2)){
			score=solve(str2);
			if (score>res){
				res=score;
			}			
		}

		if ((len1==7)&&(len2<5)||(len1==6)&&(len2<4)){
			strcpy(st[k],str2);
			k++;
		}
		scanf("%s",str2);
	}

	if(ok) goto end;
	for (i=0;i<k-1;i++)
		for (j=i+1;j<k;j++){
			strcpy(str2,st[i]);
			strcat(str2,st[j]);
			len2=strlen(str2);

			if (right(str2)){
				score=solve(str2);
				if (score>res)
					res=score;
				if (ok) goto end;
			}
		}

	end:printf("%d\n",res);
}

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