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

糯米

TI DaVinci, gstreamer, ffmpeg
隨筆 - 167, 文章 - 0, 評論 - 47, 引用 - 0
數據加載中……

POJ 2050 Searching the Web 數據結構

這題基本上沒有算法,只用了一個字符串的hash。
但代碼很長,200+行。非常榮幸的1ac了!

#include <stdio.h>
#include 
<string.h>

#define MAX_LINES 2048
#define MAX_LINE_LEN 128
#define MAX_DOCS 128
#define MAX_WORDS 65536
#define MAX_WORDS_PER_LINE 128

struct node {
    
int doc, line;
    
struct node *next;
}
;

char lines[MAX_LINES][MAX_LINE_LEN];
int docs[MAX_DOCS][MAX_LINES];
int docs_cnt;

unsigned 
int occur[MAX_DOCS][(MAX_WORDS + 31/ 32];
unsigned 
int hash[MAX_WORDS];
struct node nodes[MAX_WORDS], *head[MAX_WORDS], *tail[MAX_WORDS];
int nodes_cnt;

inline unsigned 
int strhash(char *str, int len)
{
    unsigned 
int h = 0;

    
while (len--{
        h 
*= 31;
        
if (*str >= 'A' && *str <= 'Z')
            h 
+= *str - 'A' + 'a';
        
else
            h 
+= *str;
        str
++;
    }


    
return h;
}


inline unsigned 
int test_bit(unsigned int *arr, int idx)
{
    
return arr[idx >> 5& (1 << (idx & 0x1f));
}


inline 
void set_bit(unsigned int *arr, int idx)
{
    arr[idx 
>> 5|= 1 << (idx & 0x1f);
}


inline 
int is_alpha(char ch)
{
    
return ch >= 'a' && ch <= 'z' || 
           ch 
>= 'A' && ch <= 'Z'
           ;
}


inline 
int split(char *line, char **strs, int *lens)
{
    
int cnt = 0;

    
while (*line) {
        
while (*line && !is_alpha(*line))
            line
++;
        
if (!*line)
            
break;
        
*strs++ = line;
        
for (*lens = 0; is_alpha(*line); (*lens)++)
            line
++;
        lens
++;
        cnt
++;
    }


    
return cnt;
}


inline 
int find(unsigned int h)
{
    
int i = h % MAX_WORDS;

    
while (hash[i] && hash[i] != h)
        i 
= (i + 1% MAX_WORDS;

    
return i;
}


inline 
void insert(char *str, int len, int doc, int line)
{
    unsigned 
int h = strhash(str, len);
    
int i = find(h);
    
struct node *= &nodes[nodes_cnt++];

    hash[i] 
= h;
    t
->doc = doc;
    t
->line = line;
    
if (!head[i]) 
        head[i] 
= t;
    
else 
        tail[i]
->next = t;
    tail[i] 
= t;

    set_bit(occur[doc], i);
}


int output_cnt, last_doc;

inline 
void output(int doc, int line)
{
    
if (last_doc == -1)
        last_doc 
= doc;
    
if (last_doc != doc) {
        printf(
"----------\n");
        last_doc 
= doc;
    }

    printf(
"%s\n", lines[docs[doc][line]]);
    output_cnt
++;
}


struct node *list[MAX_LINES];

inline 
void mark_one(int id, int doc)
{
    
struct node *t;

    
for (t = head[id]; t; t = t->next) 
        
if (doc == -1 || t->doc == doc)
            list[docs[t
->doc][t->line]] = t;
}


inline 
void dump_list()
{
    
int i;

    
for (i = 0; i < MAX_LINES; i++)
        
if (list[i])
            output(list[i]
->doc, list[i]->line);
}


inline 
void search_one(int id)
{
    memset(list, 
0sizeof(list));
    mark_one(id, 
-1);
    dump_list();
}


inline 
void search_and(int id1, int id2)
{
    
int i;

    memset(list, 
0sizeof(list));
    
for (i = 0; i < docs_cnt; i++)
        
if (test_bit(occur[i], id1) && test_bit(occur[i], id2)) {
            mark_one(id1, i);
            mark_one(id2, i);
        }

    dump_list();
}


inline 
void search_or(int id1, int id2)
{
    memset(list, 
0sizeof(list));
    mark_one(id1, 
-1);
    mark_one(id2, 
-1);
    dump_list();
}


inline 
void search_not(int id)
{
    
int i, j;

    
for (i = 0; i < docs_cnt; i++
        
if (!test_bit(occur[i], id))
            
for (j = 0; docs[i][j]; j++)
                output(i, j);
}


int main()
{
    
int i, j, k, c, n, l = 1, lens[MAX_WORDS_PER_LINE], id[8];
    
char *strs[MAX_WORDS_PER_LINE];

    freopen(
"e:\\in.txt""r", stdin);

    scanf(
"%d\n"&docs_cnt);
    
for (i = 0; i < docs_cnt; i++{
        
for (j = 0;
            gets(lines[l]), strcmp(lines[l], 
"**********");
            j
++, l++
        
{
            docs[i][j] 
= l;
            c 
= split(lines[l], strs, lens);
            
for (k = 0; k < c; k++)
                insert(strs[k], lens[k], i, j);
        }

    }


    scanf(
"%d\n"&n);
    
while (n--{
        gets(lines[l]);
        c 
= split(lines[l], strs, lens);
        output_cnt 
= 0;
        last_doc 
= -1;
        
for (i = 0; i < c; i++)
            id[i] 
= find(strhash(strs[i], lens[i]));
        
if (c == 1
            search_one(id[
0]);
        
else if (c == 2
            search_not(id[
1]);
        
else if (strs[1][0== 'A')
            search_and(id[
0], id[2]);
        
else
            search_or(id[
0], id[2]);
        
if (!output_cnt)
            printf(
"Sorry, I found nothing.\n");
        printf(
"==========\n");
    }


    
return 0;
}


posted on 2010-07-23 13:24 糯米 閱讀(589) 評論(0)  編輯 收藏 引用 所屬分類: POJ

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            **网站欧美大片在线观看| 99天天综合性| 一区二区三区自拍| 亚洲一区在线观看视频| 亚洲电影免费观看高清| 亚洲在线免费| 国产欧美一级| 免费欧美日韩| 久久久久久网| 日韩亚洲欧美成人一区| 亚洲第一主播视频| 欧美激情2020午夜免费观看| 亚洲精品乱码久久久久久久久| 欧美激情二区三区| 欧美日韩一区二区欧美激情| 欧美怡红院视频| 免费试看一区| 亚洲自拍偷拍麻豆| 久久青草欧美一区二区三区| 亚洲视频电影在线| 久久婷婷国产综合精品青草| 亚洲视频免费看| 久久久久久九九九九| 亚洲男女自偷自拍| 欧美jizzhd精品欧美巨大免费| 亚欧美中日韩视频| 欧美日韩亚洲一区三区| 欧美刺激性大交免费视频| 欧美激情乱人伦| 欧美成人免费全部| 久久综合九色综合网站| 国产精品久久久久av| 亚洲精品日本| 一区二区三区不卡视频在线观看| 噜噜噜噜噜久久久久久91| 亚洲第一区中文99精品| 亚洲裸体视频| 亚洲风情亚aⅴ在线发布| 国产日韩高清一区二区三区在线| 日韩视频久久| 亚洲一区二区精品| 欧美午夜不卡在线观看免费 | 亚洲人成绝费网站色www| 亚洲精品中文字| 亚洲一区二区三区免费视频| 国产欧美91| 欧美成人免费观看| 日韩视频一区二区三区在线播放| 日韩亚洲不卡在线| 欧美女同在线视频| 午夜精品久久久久久久99樱桃 | 久久婷婷国产综合尤物精品| 久久精品中文| 国产欧美日韩精品a在线观看| 另类天堂视频在线观看| 亚洲欧洲一区二区在线播放| 亚洲综合三区| 国产亚洲欧美日韩日本| 久久精品一区蜜桃臀影院| 一区二区三区www| 久久在线91| 99国产精品一区| 国产精品欧美精品| 久久天堂成人| 欧美激情网友自拍| 欧美专区亚洲专区| 亚洲第一黄色| 欧美日韩激情网| 香蕉久久夜色精品国产| 亚洲成色最大综合在线| 亚洲欧美不卡| 亚洲男女毛片无遮挡| 99精品国产高清一区二区| 国产在线观看91精品一区| 国产精品网站在线| 国产精品免费一区二区三区在线观看| 亚洲毛片在线观看| 亚洲精品影院| 9久草视频在线视频精品| 欧美黄色成人网| 理论片一区二区在线| 久久综合狠狠| 欧美成年人视频| 国内在线观看一区二区三区| 国产农村妇女精品一区二区| 国产亚洲va综合人人澡精品| 国产一区白浆| 国产手机视频一区二区| 国产精品视频免费观看www| 欧美成人综合| 国产精品久久久久久久久动漫 | 亚洲国产精品v| 亚洲三级网站| 亚洲一区在线播放| 久久久精品国产免大香伊 | 亚洲综合视频在线| 亚洲国产成人在线| 免费h精品视频在线播放| 亚洲视频第一页| 欧美日韩一区二| 亚洲视频第一页| 一区二区三区精密机械公司| 欧美国产在线电影| 国产一区二区精品久久99| 久久精品视频在线播放| 一区二区三区日韩精品| 欧美色中文字幕| 欧美成人综合在线| 亚洲欧美日韩精品久久久| 99成人精品| 伊大人香蕉综合8在线视| 亚洲国产裸拍裸体视频在线观看乱了中文 | 欧美成人精品在线观看| 欧美激情一区二区三区四区| 国内精品久久久久影院优| 午夜精品福利一区二区三区av| 亚洲日本va午夜在线电影| 欧美视频一二三区| 午夜精品福利视频| 亚洲欧美日韩一区二区三区在线| 国产精品黄色| 久久精品欧美| 亚洲色图自拍| 精品999日本| 欧美激情视频一区二区三区在线播放 | 国产视频欧美视频| 久久精品国产亚洲一区二区| 先锋资源久久| 亚洲成人自拍视频| 亚洲激情影视| 国产精品一区在线观看你懂的| 亚洲欧美综合另类中字| 午夜在线精品| 亚洲视频福利| 欧美成人免费全部| 久久av资源网站| 欧美电影免费观看网站 | 欧美在线三区| 欧美极品一区| 国产精品高潮呻吟久久av黑人| 欧美一级久久久久久久大片| 欧美成人精品影院| 亚洲欧美日韩第一区| 久久综合九九| 欧美成人免费全部观看天天性色| 中文精品在线| 国产三级欧美三级日产三级99| 亚洲高清不卡在线| 日韩午夜中文字幕| 国产一区二区三区日韩| 亚洲国产精彩中文乱码av在线播放| 久久在线免费视频| 亚洲一区二区在线播放| 久久国产欧美| 亚洲欧美激情视频| 巨乳诱惑日韩免费av| 午夜在线不卡| 欧美精品九九| 亚洲国产精选| 亚洲欧洲一区二区天堂久久| 亚洲欧美日韩另类精品一区二区三区| 亚洲国产另类久久久精品极度| 亚洲一区国产| 午夜精品国产更新| 欧美日韩1080p| 亚洲激情综合| 亚洲欧洲一区二区在线观看| 欧美福利在线| 亚洲高清视频在线观看| 另类亚洲自拍| 欧美激情1区2区3区| 一本久久青青| 亚洲欧美日韩精品久久亚洲区 | 亚洲国产免费| 黄网站免费久久| 久久综合色综合88| 女女同性女同一区二区三区91| 国产亚洲观看| 久热精品视频在线观看一区| 亚洲高清一区二| 国产日韩一区在线| 久久精品1区| 欧美www在线| 在线视频你懂得一区| 欧美一区高清| 先锋资源久久| 久久久91精品国产一区二区精品| 欧美午夜不卡在线观看免费| 欧美成人一二三| 亚洲国产激情| 久久久av毛片精品| 宅男精品视频| 巨乳诱惑日韩免费av| 久久爱www.| 91久久在线观看| 亚洲毛片一区| 国产午夜亚洲精品不卡| 亚洲午夜精品一区二区| 国产精品扒开腿做爽爽爽软件| 久久国产一区二区|