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

學(xué)習(xí)心得(code)

superlong@CoreCoder

  C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  74 Posts :: 0 Stories :: 5 Comments :: 0 Trackbacks

公告

文字可能放在http://blog.csdn.net/superlong100,此處存放代碼

常用鏈接

留言簿(4)

我參與的團(tuán)隊

搜索

  •  

最新隨筆

最新評論

  • 1.?re: Poj 1279
  • 對于一個凹多邊形用叉積計算面積 后能根據(jù)結(jié)果的正負(fù)來判斷給的點集的時針方向?
  • --bsshanghai
  • 2.?re: Poj 3691
  • 你寫的這個get_fail() 好像并是真正的get_fail,也是說fail指向的串并不是當(dāng)前結(jié)點的子串。為什么要這樣弄呢?
  • --acmer1183
  • 3.?re: HDU2295[未登錄]
  • 這個是IDA* 也就是迭代加深@ylfdrib
  • --superlong
  • 4.?re: HDU2295
  • 評論內(nèi)容較長,點擊標(biāo)題查看
  • --ylfdrib
  • 5.?re: HOJ 11482
  • 呵呵..把代碼發(fā)在這里很不錯..以后我也試試...百度的編輯器太爛了....
  • --csuft1

閱讀排行榜

評論排行榜

#include <iostream>
#include 
<string>
#define EPS 1e-6
#define MAXN 101
#define zero(x) (((x)>0?(x):-(x))<EPS)
using namespace std;

int DEBUG;
int n, m, num;

struct tree
{
    tree 
*next[52], *fail;
    
int id, L;
};

struct point
{
    
double x, y;
    
void data(int i, int j)
    {x 
= i; y = j;}
    
void write(){printf("%.0lf %.0lf\n",x, y);}
};

tree 
*root, *p;

tree arr[
1000005];
int  indexx;

int map(char ch)
{
    
if(ch <= 'Z'return ch - 'A';
    
else          return ch - 'a';
}

void newn()
{
    arr[indexx].fail 
= NULL;
    arr[indexx].id 
= 0;
    arr[indexx].L 
= -1;
    
for(int i = 0; i < 52; i ++) arr[indexx].next[i] = 0;
}

void init()
{
    indexx 
= 0;
    newn();
    root 
= &arr[indexx ++];
}

void insert(char ch[], int id, int L)
{
    
int t, i = 0;
    p 
= root;
    
while(ch[i])
    {
        t 
= map(ch[i]);
        
if(p->next[t] == 0)
        {
            newn();
            p
->next[t] = &arr[indexx ++];
        }
        p 
= p->next[t];
        i 
++;
    }
    p
->= L - 1;
    p
->id = id;
}

tree 
*que[1000005];

void get_fail()
{
    
int close = -1, open = 0;
    p 
= root;    p->fail = root;
    que[
0= p;
    
while(close < open)
    {
        p 
= que[++close];
        
for(int i = 0; i < 52; i ++)
        {
            
if(p->next[i] == 0)
            {
                
if(p == root) p->next[i] = root;
                
else          p->next[i] = p->fail->next[i];
            }
            
else
            {
                
if(p == root) p->next[i]->fail = root;
                
else          p->next[i]->fail = p->fail->next[i];
                que[
++open] = p->next[i];
            }
        }
    }
}

char  list[101][101];
point line[
101][2];

int mv[8][2= {{01}, {10}, {11}, {-1-1}, {0-1}, {-10}, {1-1}, {-11}};

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


void query(int inix, int iniy, int way)//way => direction
{
    
int t, i = 0, x = inix, y = iniy;
    
    tree 
*q;
    p 
= root;
    
while( ok(x, y) )
    {
        t 
= map(list[x][y]);
        
while(!p->next[t] && p != root) p = p->fail;
        p 
= p->next[t];
        
if(!p) p = root; q = p;
        
while( q != root && q->fail)
        {
            
if(q->id)
            {
                
int i = q->id;
                point end;
                end.data(x, y);    
                line[i][
1= end;
                
                point sta;
                sta.data(x 
- q->* mv[way][0], y - q->* mv[way][1]);
                line[i][
0= sta;
                
                q
->id = 0;
            }
            q 
= q->fail;
        }
        i 
++;
        x 
+= mv[way][0];
        y 
+= mv[way][1];
    }
}

int tu[101][101];

//計算cross product (P1-P0)x(P2-P0)
double xmult(point p1,point p2,point p0){
    
return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
}

//判三點共線
int dots_inline(point p1,point p2,point p3){
    
return zero(xmult(p1,p2,p3));
}

//判點是否在線段上,包括端點
int dot_online_in(point p,point l1,point l2){
    
return zero(xmult(p,l1,l2))&&(l1.x-p.x)*(l2.x-p.x)<EPS&&(l1.y-p.y)*(l2.y-p.y)<EPS;
}

//判兩點在線段同側(cè),點在線段上返回0
int same_side(point p1,point p2,point l1,point l2){
    
return xmult(l1,p1,l2)*xmult(l1,p2,l2)>EPS;
}

//判兩線段相交,包括端點和部分重合
int intersect_in(point u1,point u2,point v1,point v2){
    
if (!dots_inline(u1,u2,v1)||!dots_inline(u1,u2,v2))
        
return !same_side(u1,u2,v1,v2)&&!same_side(v1,v2,u1,u2);
    
return dot_online_in(u1,v1,v2)||dot_online_in(u2,v1,v2)||dot_online_in(v1,u1,u2)||dot_online_in(v2,u1,u2);
}

//計算兩直線交點,注意事先判斷直線是否平行!
point intersection(point u1,point u2,point v1,point v2){
    point ret
=u1;
    
double t=((u1.x-v1.x)*(v1.y-v2.y)-(u1.y-v1.y)*(v1.x-v2.x))
            
/((u1.x-u2.x)*(v1.y-v2.y)-(u1.y-u2.y)*(v1.x-v2.x));
    ret.x
+=(u2.x-u1.x)*t;
    ret.y
+=(u2.y-u1.y)*t;
    
return ret;
}

bool connect(int i, int j)
{
    point s1, s2, e1, e2, p;
    s1 
= line[i][0];
    e1 
= line[i][1];
    s2 
= line[j][0];
    e2 
= line[j][1];
    
    
if(intersect_in(s1, e1, s2, e2))
        p 
= intersection(s1, e1, s2, e2);
    
else return false;
        
    
if( p.x - (int)p.x > EPS || p.y - (int)p.y > EPS) return false;
    
return true;
    
}

void bulid()
{
    
int i, j;
    memset(tu, 
0sizeof(tu));
    
//線段相交構(gòu)圖 
    for(i = 1; i <= num; i ++)
    {
        
for(j = i + 1; j <= num; j ++)
        
if( connect(i, j) )
        {
            tu[i][j] 
= true;
            tu[j][i] 
= true;
        }
    }
}

int cnt;
bool h[101];

void dfs(int x)
{
    
int i;
    
for(i = 1; i <= num; i ++)
    
if(!h[i] && tu[x][i])
    {
        h[i] 
= 1;
        cnt 
++;
        dfs(i);
    }
}

void search(int n,int mat[][MAXN],int* dfn,int* low,int now,int& ret,int* key,int& cnt,int root,int& rd,int* bb){
    
int i;
    dfn[now]
=low[now]=++cnt;
    
for (i=1;i<=n;i++)
        
if (mat[now][i]){
            
if (!dfn[i]){
                search(n,mat,dfn,low,i,ret,key,cnt,root,rd,bb);
                
if (low[i]<low[now])
                    low[now]
=low[i];
                
if (low[i]>=dfn[now]){
                    
if (now!=root&&!bb[now])
                        key[ret
++]=now,bb[now]=1;
                    
else if(now==root)
                        rd
++;
                }
            }
            
else if (dfn[i]<low[now])
                low[now]
=dfn[i];
        }
}

int key_vertex(int n,int mat[][MAXN],int* key){
    
int ret=0,i,cnt,rd,dfn[MAXN],low[MAXN],bb[MAXN];
    
for (i=1;i<=n;dfn[i++]=bb[i]=0);
    
for (cnt=0,i=1;i<=n;i++)
        
if (!dfn[i]){
            rd
=0;
            search(n,mat,dfn,low,i,ret,key,cnt,i,rd,bb);
            
if (rd>1&&!bb[i])
                key[ret
++]=i,bb[i]=1;
        }
    
return ret;
}

bool solve()
{
    
//查詢 
    for(int i = 0; i < n; i ++)
    
for(int J = 0; J < m; J ++)
    {
        query(i, J, 
0); query(i, J, 4);
        query(i, J, 
1); query(i, J, 5);
        query(i, J, 
2); query(i, J, 6);
        query(i, J, 
3); query(i, J, 7);
    }
    
//建圖 
    bulid();
    memset(h ,
0 ,sizeof(h));
    cnt 
= 1;
    h[
1= 1;
    
//連通性 
    dfs(1);
    
if(cnt != num)     return false;
    
int key[101];
    
//割點 
    cnt = key_vertex(num, tu, key);
    
if(cnt > 0return false;
    
return true;
    
}

int main()
{
    DEBUG 
= 0;
    freopen(
"in1.txt","r",stdin);
    
while(scanf("%d %d %d"&n, &m, &num), n+m+num)
    {
        
for(int i = 0; i < n; i ++) scanf("%s", list[i]);
        
char temp[101];
        
//AC自動機 
        init();
        
for(int i = 1; i <= num; i ++)
        {
            scanf(
"%s", temp);
            
int l = strlen(temp);
            insert(temp, i, l);        
        }
        get_fail();
        
//構(gòu)圖求解 
        if(solve()) puts("Yes");
        
else        puts("No");
    }
    
while(1);
}

posted on 2009-09-10 16:33 superlong 閱讀(215) 評論(0)  編輯 收藏 引用
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国内精品视频久久| 午夜精品亚洲一区二区三区嫩草| 中文av一区特黄| 亚洲精品视频在线观看网站| 日韩视频免费在线观看| 中国成人亚色综合网站| 亚洲欧美在线看| 欧美一级大片在线观看| 麻豆成人在线| 亚洲黄色精品| 亚洲国产精品第一区二区| 日韩视频免费观看高清在线视频| 91久久综合| 亚洲午夜激情在线| 久久精品人人做人人爽| 亚洲国产美女精品久久久久∴| 亚洲美女免费视频| 欧美自拍偷拍| 欧美日韩国产精品专区| 国产偷久久久精品专区| 亚洲第一精品夜夜躁人人躁| 亚洲一区精彩视频| 你懂的网址国产 欧美| av成人黄色| 开心色5月久久精品| 欧美午夜精品久久久| 一区二区在线观看视频| 亚洲一二三级电影| 欧美国产极速在线| 久久国产日本精品| 欧美视频在线视频| 亚洲欧洲一区二区三区在线观看| 久久av一区二区三区漫画| 亚洲黄网站在线观看| 久久高清免费观看| 国产乱理伦片在线观看夜一区| 亚洲精品影视在线观看| 久久午夜色播影院免费高清| 中文高清一区| 欧美日韩国产色综合一二三四| 亚洲春色另类小说| 久久久久久9999| 亚洲欧美在线一区二区| 欧美视频精品一区| 99热在线精品观看| 欧美成人精品高清在线播放| 性欧美大战久久久久久久久| 国产精品国产| 宅男精品视频| 亚洲精品网址在线观看| 蜜臀va亚洲va欧美va天堂| 国内精品久久久久久久果冻传媒| 欧美亚洲自偷自偷| 亚洲欧美日韩在线综合| 国产女主播一区二区| 午夜天堂精品久久久久| 一本一道久久综合狠狠老精东影业| 欧美成人午夜剧场免费观看| 亚洲激情社区| 亚洲人成在线观看一区二区| 牛人盗摄一区二区三区视频| 亚洲国产日韩欧美一区二区三区| 久久久久久网站| 欧美与欧洲交xxxx免费观看| 国产亚洲网站| 老司机精品视频一区二区三区| 欧美在线啊v一区| 黄色成人91| 欧美激情欧美狂野欧美精品 | 亚洲一区二区三区欧美| 一本色道婷婷久久欧美| 亚洲国产精品久久| 欧美激情性爽国产精品17p| 亚洲国产精品成人一区二区| 亚洲第一精品在线| 欧美日韩在线播放| 午夜精品视频网站| 久久国产一区二区| 最新国产成人av网站网址麻豆| 亚洲福利专区| 欧美日韩免费观看一区=区三区| 亚洲天堂av高清| 亚洲女同同性videoxma| 极品中文字幕一区| 亚洲人成毛片在线播放| 欧美午夜不卡在线观看免费| 久久精品一区| 欧美福利一区| 午夜精彩国产免费不卡不顿大片| 亚洲男人影院| 亚洲高清在线观看一区| 亚洲美女福利视频网站| 国产精品美女久久久久av超清 | 亚洲成色777777女色窝| 欧美三级视频在线播放| 久久久亚洲精品一区二区三区 | 一本色道久久综合亚洲精品按摩| 国产精品亚洲一区| 欧美成人精品不卡视频在线观看| 欧美午夜电影在线| 欧美不卡在线视频| 欧美午夜久久| 米奇777超碰欧美日韩亚洲| 欧美人在线观看| 老司机一区二区三区| 欧美性大战xxxxx久久久| 欧美jjzz| 激情久久久久| 亚洲一区三区电影在线观看| 亚洲区一区二| 久久大香伊蕉在人线观看热2| a91a精品视频在线观看| 久久青草久久| 久久久av网站| 国产精品理论片| 日韩视频在线免费| 亚洲精品裸体| 美女精品在线观看| 美女主播一区| 国产日韩欧美中文| 中文国产成人精品| 一区二区三区视频在线 | 欧美一区二区三区免费在线看| 99这里只有久久精品视频| 老司机精品视频一区二区三区| 欧美综合激情网| 国产精品亚洲а∨天堂免在线| 欧美亚洲在线播放| 欧美丝袜第一区| 日韩视频一区二区| 9人人澡人人爽人人精品| 欧美不卡在线| 亚洲激情啪啪| 亚洲毛片一区| 欧美日韩国产不卡| 亚洲精品乱码久久久久久| 亚洲精品在线观| 欧美日韩国产bt| 亚洲理论在线观看| 亚洲午夜视频| 国产精品你懂的| 欧美亚洲视频在线观看| 久久er99精品| 精品动漫3d一区二区三区| 久久精品伊人| 欧美大片网址| 一本久道久久综合中文字幕| 欧美日韩国产经典色站一区二区三区| 亚洲激精日韩激精欧美精品| 一区二区三区免费观看| 欧美午夜精品久久久久免费视| 亚洲视频www| 久久久中精品2020中文| 亚洲国产日韩欧美| 欧美日韩一区二| 亚洲免费婷婷| 牛牛国产精品| 亚洲香蕉网站| 国产性色一区二区| 久久综合伊人77777| 日韩亚洲精品在线| 久久精品国产视频| 亚洲精品久久嫩草网站秘色| 国产精品swag| 久久精品国产免费观看| 亚洲欧洲精品一区| 欧美一区二区在线视频| 亚洲黄页一区| 国产啪精品视频| 女仆av观看一区| 亚洲一区二区三区四区在线观看 | 香港久久久电影| 亚洲国产va精品久久久不卡综合| 亚洲一级特黄| 国模套图日韩精品一区二区| 欧美激情精品久久久久久久变态| 亚洲综合大片69999| 嫩草成人www欧美| 亚洲女女女同性video| 亚洲福利小视频| 国产精品黄色在线观看| 免费欧美在线视频| 亚洲欧美日韩另类精品一区二区三区| 欧美77777| 久久久精品国产99久久精品芒果| 一本色道久久加勒比88综合 | 欧美一区二区三区在线免费观看| 亚洲电影免费在线观看| 国产精品综合久久久| 欧美激情久久久| 久久噜噜噜精品国产亚洲综合| 一区二区三欧美| 91久久久久久| 欧美福利视频一区| 久久天天躁狠狠躁夜夜爽蜜月| 国产日韩精品入口| 欧美理论片在线观看| 欧美日韩1区2区3区| 欧美影院久久久| 亚洲欧美综合v|