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

Posted by yc5_yc at 2012-07-23 13:41:28 on Problem 1204
In Reply To:请问我应该如何优化啊？谢谢~！！ Posted by:xiongxianhe at 2010-05-24 15:27:21
```> #include <iostream>
> using namespace std;
>
> #define L 1000
> #define C 1000
> #define W 1000
>
> //inline bool equal(char a,char b){return (a)==(b)? true:false;}
>
> int l,c,w;//获取输入的行与列和单词数
> char letters[L][C];//存放字母表
> char word[W];
> int wordLength=0;//单词的长度
> char orientation;//获取方向
> int firstline,firstcolumn;//第一次出现的位置
>
> void InLetterTable()
> {
> 	cin>>l>>c>>w;
> 	for(int i=0;i<l;i++)
> 	{
> 		for (int j=0;j<c;j++)
> 		{
> 			cin>>letters[i][j];
> 		}
> 	}
> }
>
> void InWord()
> {
> 	char c;
> 	int i=0;
> 	while(cin>>noskipws>>c && c!='\n')
> 	{
> 		word[i]=c;
> 		i++;
> 	}
> 	wordLength=i;
> }
>
> void InFromFile()
> {
> 	cin>>l>>c>>w;
> 	for(int i=0;i<l;i++)
> 		for(int j=0;j<c;j++)
> 			cin>>letters[i][j];
> }
>
> char GA(int ll,int lc)
> {
> 	int wordMove=0;
> 	while(word[wordMove]==letters[ll][lc] && ll>=0)
> 	{
> 		wordMove++;
> 		ll--;
> 	}
> 	if(wordMove==wordLength)
> 		return 'A';
> 	else
> 		return 0;
> }
>
> char GB(int ll,int lc)
> {
> 	int wordMove=0;
> 	while(word[wordMove]==letters[ll][lc] && ll>=0 && lc<c)
> 	{
> 		wordMove++;
> 		ll--;
> 		lc++;
> 	}
> 	if(wordMove==wordLength)
> 		return 'B';
> 	else
> 		return 0;
> }
>
> char GC(int ll,int lc)
> {
> 	int wordMove=0;
> 	while(word[wordMove]==letters[ll][lc]&& lc<c)
> 	{
> 		wordMove++;
> 		lc++;
> 	}
> 	if(wordMove==wordLength)
> 		return 'C';
> 	else
> 		return 0;
> }
>
> char GD(int ll,int lc)
> {
> 	int wordMove=0;
> 	while(word[wordMove]==letters[ll][lc] && ll<l && lc<c)
> 	{
> 		wordMove++;
> 		ll++;
> 		lc++;
> 	}
> 	if(wordMove==wordLength)
> 		return 'D';
> 	else
> 		return 0;
> }
>
> char GE(int ll,int lc)
> {
> 	int wordMove=0;
> 	while(word[wordMove]==letters[ll][lc] && ll<l)
> 	{
> 		wordMove++;
> 		ll++;
> 	}
> 	if(wordMove==wordLength)
> 		return 'E';
> 	else
> 		return 0;
> }
>
> char GF(int ll,int lc)
> {
> 	int wordMove=0;
> 	while(word[wordMove]==letters[ll][lc] && ll<l && lc>=0)
> 	{
> 		wordMove++;
> 		ll++;
> 		lc--;
> 	}
> 	if(wordMove==wordLength)
> 		return 'F';
> 	else
> 		return 0;
> }
>
> char GG(int ll,int lc)
> {
> 	int wordMove=0;
> 	while(word[wordMove]==letters[ll][lc] &&  lc>=0)
> 	{
> 		wordMove++;
> 		lc--;
> 	}
> 	if(wordMove==wordLength)
> 		return 'G';
> 	else
> 		return 0;
> }
>
> char GH(int ll,int lc)
> {
> 	int wordMove=0;
> 	while(word[wordMove]==letters[ll][lc] && ll>=0 && lc>=0)
> 	{
> 		wordMove++;
> 		ll--;
> 		lc--;
> 	}
> 	if(wordMove==wordLength)
> 		return 'H';
> 	else
> 		return 0;
> }
>
>
> void Search()
> {
> 	for (int i=0;i<l;i++)
> 	{
> 		for(int j=0;j<c;j++)
> 		{
> 			orientation=0;
> 			if(i>=wordLength-1)
> 				orientation=GA(i,j);
> 			if(orientation == 0 && i>=wordLength-1 && j<=c-wordLength+1)
> 				orientation=GB(i,j);
> 			if(orientation == 0 && j<=c-wordLength+1)
> 				orientation=GC(i,j);
> 			if(orientation == 0 && i<=l-wordLength+1 && j<=c-wordLength+1)
> 				orientation=GD(i,j);
> 			if(orientation == 0 && i<=l-wordLength+1)
> 				orientation=GE(i,j);
> 			if(orientation == 0 && i<=l-wordLength+1 && j>=wordLength-1)
> 				orientation=GF(i,j);
> 			if(orientation == 0 &&  j>=wordLength-1)
> 				orientation=GG(i,j);
> 			if(orientation == 0 && i>=wordLength -1 && j>=wordLength -1)
> 				orientation=GH(i,j);
> 			if(orientation)
> 			{
> 				firstline=i;
> 				firstcolumn=j;
> 				return;
> 			}
> 		}
> 	}
> }
>
> int main()
> {
> 	firstcolumn=-1;
> 	firstline=-1;
> 	InFromFile();
> 	InWord();
> 	while(w--)
> 	{
> 		InWord();
> 		Search();
> 		cout<<firstline<<" "<<firstcolumn<<" "<<orientation<<endl;
> 	}
> 	return 0;
> }
>
```

Followed by: