青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

poj1204

Word Puzzles

Time Limit: 5000MS Memory Limit: 65536K
Total Submissions: 6968 Accepted: 2651 Special Judge

Description

Word puzzles are usually simple and very entertaining for all ages. They are so entertaining that Pizza-Hut company started using table covers with word puzzles printed on them, possibly with the intent to minimise their client's perception of any possible delay in bringing them their order.

Even though word puzzles may be entertaining to solve by hand, they may become boring when they get very large. Computers do not yet get bored in solving tasks, therefore we thought you could devise a program to speedup (hopefully!) solution finding in such puzzles.

The following figure illustrates the PizzaHut puzzle. The names of the pizzas to be found in the puzzle are: MARGARITA, ALEMA, BARBECUE, TROPICAL, SUPREMA, LOUISIANA, CHEESEHAM, EUROPA, HAVAIANA, CAMPONESA.

Your task is to produce a program that given the word puzzle and words to be found in the puzzle, determines, for each word, the position of the first letter and its orientation in the puzzle.

You can assume that the left upper corner of the puzzle is the origin, (0,0). Furthemore, the orientation of the word is marked clockwise starting with letter A for north (note: there are 8 possible directions in total).

Input

The first line of input consists of three positive numbers, the number of lines, 0 < L <= 1000, the number of columns, 0 < C <= 1000, and the number of words to be found, 0 < W <= 1000. The following L input lines, each one of size C characters, contain the word puzzle. Then at last the W words are input one per line.

Output

Your program should output, for each word (using the same order as the words were input) a triplet defining the coordinates, line and column, where the first letter of the word appears, followed by a letter indicating the orientation of the word according to the rules define above. Each value in the triplet must be separated by one space only.

Sample Input

20 20 10
QWSPILAATIRAGRAMYKEI
AGTRCLQAXLPOIJLFVBUQ
TQTKAZXVMRWALEMAPKCW
LIEACNKAZXKPOTPIZCEO
FGKLSTCBTROPICALBLBC
JEWHJEEWSMLPOEKORORA
LUPQWRNJOAAGJKMUSJAE
KRQEIOLOAOQPRTVILCBZ
QOPUCAJSPPOUTMTSLPSF
LPOUYTRFGMMLKIUISXSW
WAHCPOIYTGAKLMNAHBVA
EIAKHPLBGSMCLOGNGJML
LDTIKENVCSWQAZUAOEAL
HOPLPGEJKMNUTIIORMNC
LOIUFTGSQACAXMOPBEIO
QOASDHOPEPNBUYUYOBXB
IONIAELOJHSWASMOUTRK
HPOIYTJPLNAQWDRIBITG
LPOINUYMRTEMPTMLMNBO
PAFCOPLHAVAIANALBPFS
MARGARITA
ALEMA
BARBECUE
TROPICAL
SUPREMA
LOUISIANA
CHEESEHAM
EUROPA
HAVAIANA
CAMPONESA

Sample Output

0 15 G
2 11 C
7 18 A
4 8 C
16 13 B
4 15 E
10 3 D
5 1 E
19 7 C
11 11 H

Source


基本多串匹配
給定一個字母矩陣
在給定一些單詞,問這些單詞在矩陣中的位置和方向,
囧呆了,單詞構建trie樹,
把矩陣中的每一個8個方向之一的字符串看作文章
然后去做自動機
只需要枚舉周圍一圈的點的方向即可(想了好久才明白,自己去琢磨),

看來自己對ac自動機還不是理解的很透徹,得再看幾遍

#include <cstdio>
#include 
<cstdlib>
#include 
<cstring>
#include 
<cmath>
#include 
<ctime>
#include 
<cassert>
#include 
<iostream>
#include 
<sstream>
#include 
<fstream>
#include 
<map>
#include 
<set>
#include 
<vector>
#include 
<queue>
#include 
<algorithm>
#include 
<iomanip>
#define maxn 1005
using namespace std;
int n,m,w;
char s1[maxn][maxn];
char str[maxn];
int dx[8][2]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};
struct node
{
    
int next[26];
    
int count;
    
int fail;
    
void init()
    
{
        memset(next,
-1,sizeof(next));
        count
=0;fail=0;
    }

}
s[5000005];
struct result
{
    
int x,y,d;
}
res[maxn];
int sind;
int q[500005],head,tail;
int len[maxn];
void cas_init()
{
    s[
0].init();
    sind
=1;
}

void ins(char srt[],int k)
{
    
int len=strlen(str);
    
int i,j,ind;
    ind
=0;
    
for(i=0;i<len;i++)
    
{
        j
=str[i]-'A';
        
if(s[ind].next[j]==-1)
        
{
            s[sind].init();
            s[ind].next[j]
=sind++;
        }

        ind
=s[ind].next[j];
    }

    s[ind].count
=k;
}

void make_fail()
{
    head
=0;tail=0;
    
int i,ind,ind_f;
    
for(i=0;i<26;i++)
    
{
        
if(s[0].next[i]!=-1)
        
{
            q[
++tail]=s[0].next[i];
        }

    }

    
while(head<tail)
    
{
        ind
=q[++head];
        
for(i=0;i<26;i++)
        
{
            
if(s[ind].next[i]!=-1)
            
{
                q[
++tail]=s[ind].next[i];
                ind_f
=s[ind].fail;
                
while(ind_f>0&&s[ind_f].next[i]==-1)
                ind_f
=s[ind_f].fail;
                
if(s[ind_f].next[i]!=-1)
                ind_f
=s[ind_f].next[i];
                s[s[ind].next[i]].fail
=ind_f;
            }

        }

    }

}

bool check(int x,int y)
{
    
return (x>=0&&x<n&&y>=0&&y<m);
}

void fd(int x1,int y1,int d)
{
    
int di,i,ind,p,x,y;
    ind
=0;x=x1;y=y1;
    
for(;check(x,y);x+=dx[d][0],y+=dx[d][1])
    
{
        i
=s1[x][y]-'A';
        
while(ind>0&&s[ind].next[i]==-1)
        ind 
=s[ind].fail;
        
if(s[ind].next[i]!=-1)
        
{
            ind
=s[ind].next[i];
            p
=ind;
            
//printf("%d\n",ind);
            while(p>0&&s[p].count!=-1)
            
{
                
int tmp=s[p].count;
                res[tmp].x
=x-(len[tmp]-1)*dx[d][0];
                res[tmp].y
=y-(len[tmp]-1)*dx[d][1];
                res[tmp].d
=d;
                
//cout<<s[p].count<<" "<<x1<<" "<<y1<<" "d<<endl;
                s[p].count=-1;
                p
=s[p].fail;
            }

        }

    }

}

int main()
{
    scanf(
"%d%d%d",&n,&m,&w);
    
for(int i=0;i<n;i++) scanf("%s",s1[i]);
    cas_init();
    
for(int i=1;i<=w;i++)
    
{
        scanf(
"%s",str);
        len[i]
=strlen(str);
        ins(str,i);
    }

    make_fail();
    
for(int i=0;i<m;i++)
    
{
        fd(
0,i,3);fd(0,i,4);fd(0,i,5);
        fd(n
-1,i,7);fd(n-1,i,0);fd(n-1,i,1);
    }

    
for(int i=0;i<n;i++)
    
{
        fd(i,
0,1);fd(i,0,2);fd(i,0,3);
        fd(i,m
-1,5);fd(i,m-1,6);fd(i,m-1,7);
    }

    
for(int i=1;i<=w;i++)
    printf(
"%d %d %c\n",res[i].x,res[i].y,res[i].d+'A');
    
return 0;
}



這個題說的還是比較模糊的了,沒有說明多個匹配的情況怎么辦,
但是它special judge了,應該是輸出任意一中情況即可

posted on 2012-07-18 00:06 jh818012 閱讀(243) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

導航

統計

常用鏈接

留言簿

文章檔案(85)

搜索

最新評論

  • 1.?re: poj1426
  • 我嚓,,輝哥,,居然搜到你的題解了
  • --season
  • 2.?re: poj3083
  • @王私江
    (8+i)&3 相當于是 取余3的意思 因為 3 的 二進制是 000011 和(8+i)
  • --游客
  • 3.?re: poj3414[未登錄]
  • @王私江
    0ms
  • --jh818012
  • 4.?re: poj3414
  • 200+行,跑了多少ms呢?我的130+行哦,你菜啦,哈哈。
  • --王私江
  • 5.?re: poj1426
  • 評論內容較長,點擊標題查看
  • --王私江
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美成人免费全部| 欧美69wwwcom| 欧美日韩亚洲系列| 午夜精品视频在线| 久久婷婷麻豆| 一区二区三区欧美在线| 亚洲一区二区三区激情| 亚洲大片精品永久免费| 日韩午夜精品| 亚洲大胆人体视频| 亚洲一本视频| 亚洲欧洲精品一区二区三区波多野1战4 | 久久午夜精品一区二区| 欧美激情aⅴ一区二区三区| 久久不射网站| 欧美性生交xxxxx久久久| 女人色偷偷aa久久天堂| 国产精品视频久久一区| 最新国产精品拍自在线播放| 国产美女精品视频| 日韩视频免费| 亚洲区一区二区三区| 欧美一区二区三区视频在线观看| 亚洲精品美女久久久久| 久久国产欧美日韩精品| 欧美永久精品| 欧美视频一区在线观看| 欧美日韩在线不卡| 亚洲激情在线激情| 欧美色大人视频| 亚洲福利小视频| 狠狠狠色丁香婷婷综合久久五月| 一本色道久久综合| 夜色激情一区二区| 欧美大片在线观看| 欧美a级一区| 韩国av一区| 欧美一区=区| 久久成人精品无人区| 国产精品伦理| 亚洲一区二区三区四区在线观看 | 欧美一区二区日韩| 欧美一区二区女人| 国产精品日韩欧美一区| 亚洲线精品一区二区三区八戒| 99视频热这里只有精品免费| 欧美福利在线观看| 亚洲激情电影中文字幕| 亚洲国产毛片完整版| 久久久久久久一区二区| 久久一区二区三区国产精品| 国外精品视频| 久久综合久久综合久久| 美日韩免费视频| 一区免费视频| 久久综合伊人77777麻豆| 欧美成人精品三级在线观看| 亚洲国产二区| 欧美日韩国产综合久久| 99国产一区二区三精品乱码| 午夜精品成人在线| 国产精品伊人日日| 欧美影院精品一区| 欧美aⅴ一区二区三区视频| 亚洲国产视频直播| 欧美精品久久久久久| 一区二区三区高清在线| 欧美亚洲自偷自偷| 伊人久久亚洲热| 欧美成人综合网站| 一区二区三区欧美激情| 久久精品99国产精品酒店日本| 狠狠色狠狠色综合日日五| 久久只有精品| 99人久久精品视频最新地址| 欧美一区激情| 亚洲国产精品一区二区第四页av| 欧美日韩成人在线播放| 亚洲在线观看免费视频| 狼狼综合久久久久综合网| 亚洲精品免费一二三区| 欧美性猛交xxxx乱大交蜜桃| 欧美在线看片| 亚洲人成人99网站| 久久精品视频播放| 亚洲片在线观看| 国产精品你懂的在线欣赏| 久久精品欧洲| 亚洲老板91色精品久久| 久久久久成人精品| 亚洲另类自拍| 国产一区av在线| 欧美日韩国产综合视频在线观看| 亚洲欧美日韩中文播放| 欧美激情无毛| 久久精品99| 一区二区三区黄色| 午夜精品久久一牛影视| 亚洲九九爱视频| 国产欧美精品日韩区二区麻豆天美 | 国产精品久久久久久久久免费 | 久久精品国产免费| 日韩亚洲国产欧美| 狠狠色狠狠色综合人人| 国产精品国产三级国产aⅴ浪潮| 久久在线视频在线| 亚欧成人精品| 中文精品视频| 亚洲精品视频啊美女在线直播| 久久美女性网| 欧美一级午夜免费电影| 一本大道久久a久久综合婷婷 | 亚洲欧美乱综合| 亚洲日韩视频| 欧美国产日本韩| 久久夜色精品国产欧美乱| 亚洲欧美日韩成人| 一本久久a久久免费精品不卡| 亚洲电影免费| 国产一区二三区| 国产女人aaa级久久久级| 欧美图区在线视频| 欧美日本韩国一区| 欧美高清视频www夜色资源网| 久久亚洲二区| 久久久欧美精品| 久久精品人人做人人爽电影蜜月| 亚洲一区在线观看免费观看电影高清| 亚洲精品中文字幕女同| 91久久在线播放| 亚洲欧洲免费视频| 亚洲激情偷拍| 亚洲激情在线观看| 亚洲伦理在线| 99国产精品| 亚洲作爱视频| 一区二区三区视频观看| 一本色道久久综合亚洲二区三区| 亚洲另类视频| 一区二区欧美日韩| 亚洲一区二区三区欧美| 亚洲一区二区三区在线看 | 在线亚洲欧美| 一区二区三区欧美激情| 夜夜嗨一区二区| 亚洲一区在线播放| 亚洲在线观看视频| 亚洲自拍16p| 欧美在线影院| 久久久久久尹人网香蕉| 麻豆91精品91久久久的内涵| 免费日本视频一区| 亚洲国产一区二区视频| 99精品福利视频| 亚洲午夜久久久久久久久电影网| 亚洲午夜一区二区三区| 欧美综合国产| 欧美国产日产韩国视频| 欧美午夜一区二区福利视频| 国产精品揄拍500视频| 国产综合视频在线观看| 亚洲黄一区二区三区| 亚洲视频999| 久久久噜噜噜久久狠狠50岁| 欧美电影免费| 亚洲一区二区欧美日韩| 久久精品国产久精国产思思| 欧美自拍偷拍| 先锋影音国产一区| 玖玖视频精品| 欧美视频成人| 黄色成人在线| 宅男精品视频| 久久久久久久成人| 亚洲黑丝一区二区| 亚洲欧美三级在线| 猫咪成人在线观看| 欧美性猛片xxxx免费看久爱| 狠狠色狠狠色综合日日91app| 亚洲精品女av网站| 欧美制服丝袜第一页| 亚洲国产成人精品久久久国产成人一区| 亚洲毛片一区| 久久久久久高潮国产精品视| 欧美日韩午夜精品| 伊人精品在线| 亚洲欧美日韩国产综合| 欧美黑人在线观看| 午夜精品免费视频| 欧美激情精品久久久久久免费印度 | 午夜精品电影| 亚洲国产高清在线观看视频| 午夜日韩福利| 欧美日韩一区二区在线观看| 黄色免费成人| 欧美在线精品一区| 日韩视频免费大全中文字幕| 久久综合中文色婷婷| 国产日韩精品一区二区| 亚洲无线视频|