哈希 基于词频的文件相似度

14 篇文章 2 订阅
订阅专栏

哈希 基于词频的文件相似度

题目

实现一种简单原始的文件相似度计算,即以两文件的公共词汇占总词汇的比例来定义相似度。为简化问题,这里不考虑中文(因为分词太难了),只考虑长度不小于3、且不超过10的英文单词,长度超过10的只考虑前10个字母。

输入

输入首先给出正整数N(<= 100),为文件总数,随后按以下格式给出每个文件的内容:首先给出文件正文,最后在一行中只给出一个字符“#”,表示文件结束。在N个文件内容结束之后,给出查询总数M(<= 10^4),随后M行,每行给出一对文件编号,其间以空格分隔。这里假设文件按给出的顺序从1到N编号。

输出

针对每一条查询,在一行中输出两文件的相似度,即两文件的公共词汇量占两文件总词汇量的百分比,精确到小数点后1位。注意,这里的一个“单词”只包含仅由英文字母组成的、长度不小于3、且不超过10的英文单词,长度超过10的只考虑前10个字母。单词间以任何非英文字母隔开。另外,大小写不同的同一单词被认为是相同的单词,例如“You”和“you”是同一个单词。

样例

在这里插入图片描述
在这里插入图片描述

题解

将每个单词利用哈希函数映射到对应的散列表中,同时将文件编号插入到散列表中的倒排索引表,之后将单词在散列表中的位置存入每个文件的词汇索引表。计算两个文件的相似度时,只需要选择词汇量较小的那个文件,遍历该文件的词汇索引表,找到单词在散列表中的位置并扫描该单词的倒排索引表,如果倒排索引表中的文件编号与另一个文件的编号相同,则说明该单词同时出现在两个文件中。
极致码农题

代码

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

#define MAXS 10
#define MINS 3
#define MAXB 5
#define MAXTable 500009

typedef char ElementType[MAXS + 1];

typedef struct FileEntry{
    int words;
    struct FileEntry *Next;
}WList;

typedef struct WordEntry{
    int FileNo;
    struct WordEntry *Next;
}FList;

struct HashEntry{
    ElementType Element;
    int FileNo;
    FList *InvIndex;
};

typedef struct HashTbl{
    int TableSize;
    struct HashEntry *TheCells;
}HashTable;

HashTable* Table_Init(int TableSize){
    HashTable *H = malloc(sizeof(HashTable));
    H->TableSize = TableSize;
    H->TheCells = malloc(sizeof(struct HashEntry) * H->TableSize);
    while (TableSize){
        H->TheCells[--TableSize].FileNo = 0;
        H->TheCells[TableSize].InvIndex = NULL;
    }
    return H;
}

WList* FileIndex_Init(int Size){
    WList *F = malloc(sizeof(FList) * Size);
    while (Size){
        F[--Size].words = 0;
        F[Size].Next = NULL;
    }
    return F;
}

int GetWord(ElementType Word){
    char c;
    int p = 0;
    scanf("%c", &c);
    while (!isalpha(c) && (c != '#'))
        scanf("%c", &c);
    if (c == '#')
        return 0;
    while (isalpha(c) && (p < MAXS)){
        Word[p++] = tolower(c);
        scanf("%c", &c);
    }
    while (isalpha(c))
        scanf("%c", &c);
    if (p < MINS)
        return GetWord(Word);
    else{
        Word[p] = '\0';
        return 1;
    }
}

int Hash(char *key,int p){
    unsigned int h = 0;
    while (*key != '\0')
        h = (h << MAXB) + (*key++ - 'a');
    return h % p;
}

int Find(ElementType key, HashTable *H){
    int pos = Hash(key, H->TableSize);
    while (H->TheCells[pos].FileNo && strcmp(H->TheCells[pos].Element, key)){
        pos++;
        if (pos == H->TableSize)
            pos -= H->TableSize;
    }
    return pos;
}

int InsertAndIndex(int FileNo, ElementType key, HashTable *H){
    FList *F;
    int pos = Find(key, H);
    if (H->TheCells[pos].FileNo != FileNo){
        if (!H->TheCells[pos].FileNo)
            strcpy(H->TheCells[pos].Element, key);
        H->TheCells[pos].FileNo = FileNo;
        F = malloc(sizeof(FList));
        F->FileNo = FileNo;
        F->Next = H->TheCells[pos].InvIndex;
        H->TheCells[pos].InvIndex = F;
        return pos;
    }
    else
        return -1;
}

void FileIndex(WList *File, int FileNo, int pos){
    WList *W;
    if (pos < 0)
        return;
    W = malloc(sizeof(WList));
    W->words = pos;
    W->Next = File[FileNo-1].Next;
    File[FileNo-1].Next = W;
    File[FileNo-1].words++;
}

double work(WList *File, int F1, int F2, HashTable *H){
    int temp;
    WList *W;
    FList *F;
    if (File[F1-1].words > File[F2-1].words){
        temp = F1;
        F1 = F2;
        F2 = temp;
    }
    temp = 0;
    W = File[F1-1].Next;
    while (W) {
        F = H->TheCells[W->words].InvIndex;
        while (F) {
            if (F->FileNo == F2)
                break;
            F = F->Next;
        }
        if (F)
            temp++;
        W = W->Next;
    }
    return ((double)(temp * 100)/ (double)(File[F1 - 1].words + File[F2 - 1].words - temp));
}

int main(){
    int n, m, f1, f2;
    ElementType word;
    HashTable *H;
    WList *File;
    scanf("%d", &n);
    File = FileIndex_Init(n);
    H = Table_Init(MAXTable);
    for (int i = 0; i < n; i++)
        while(GetWord(word))
            FileIndex(File, i + 1, InsertAndIndex(i+1, word, H));
    scanf("%d", &m);
    for (int i = 0 ; i < m; i++){
        scanf("%d %d", &f1, &f2);
        printf("%.1f%c\n", work(File, f1, f2, H), '%');
    }
    return 0;
}

代码详解:

文件的词汇索引表:

typedef struct FileEntry{ //是一个动态链表
    int words; //第一个表示该文件的词汇总数,之后表示该单词在散列表中的位置
    struct FileEntry *Next;
}WList;

简化版散列表定义以及初始化:

typedef struct WordEntry{ //是一个动态链表
    int FileNo; //文件编号
    struct WordEntry *Next; //指向下一个文件的编号
}FList;

struct HashEntry{ 
    ElementType Element; //单词
    int FileNo; 
    FList *InvIndex; //单词的倒排索引表
};

typedef struct HashTbl{
    int TableSize; //散列表的大小
    struct HashEntry *TheCells; //散列表静态数组
}HashTable;

HashTable* Table_Init(int TableSize){ //初始化散列表
    HashTable *H = malloc(sizeof(HashTable));
    H->TableSize = TableSize;
    H->TheCells = malloc(sizeof(struct HashEntry) * H->TableSize);
    while (TableSize){
        H->TheCells[--TableSize].FileNo = 0;
        H->TheCells[TableSize].InvIndex = NULL;
    }
    return H;
}

初始化文件索引表:

WList* FileIndex_Init(int Size){
    WList *F = malloc(sizeof(FList) * Size);
    while (Size){
        F[--Size].words = 0;
        F[Size].Next = NULL;
    }
    return F;
}

读取单词:

int GetWord(ElementType Word){
//从当前字符开始,读到单词尾的第一个非字母符号为止
//读成功则返回1;读到文件结束则返回0
    char c;
    int p = 0;
    scanf("%c", &c);
    while (!isalpha(c) && (c != '#'))
        scanf("%c", &c);//跳过最开始的非字母
    if (c == '#')
        return 0;
    while (isalpha(c) && (p < MAXS)){ //读入单词
        Word[p++] = tolower(c);
        scanf("%c", &c);
    }
    while (isalpha(c)) //跳过超长的字母(相当于只读取、不存储)
        scanf("%c", &c);
    if (p < MINS) //太短的单词不要,读下一个
        return GetWord(Word);
    else{
        Word[p] = '\0';
        return 1;
    }
}

字符串移位法散列函数(哈希函数):

int Hash(char *key,int p){
    unsigned int h = 0;
    while (*key != '\0')
        h = (h << MAXB) + (*key++ - 'a');
    return h % p;
}

在散列表中分配单词及查找单词的位置:

int Find(ElementType key, HashTable *H){
//返回Key的位置,或者返回适合插入Key的位置
    int pos = Hash(key, H->TableSize);
//先找到散列映射后的位置
    while (H->TheCells[pos].FileNo && strcmp(H->TheCells[pos].Element, key)){
//若该位置已经被其它关键字占用
        pos++; //线性探测下一个位置
        if (pos == H->TableSize)
            pos -= H->TableSize;
    }
    return pos;
}

将单词插入散列表,同时插入对应的倒排索引表:

int InsertAndIndex(int FileNo, ElementType key, HashTable *H){
    FList *F;
    int pos = Find(key, H);
//找到Key的位置,或者是适合插入Key的位置
    if (H->TheCells[pos].FileNo != FileNo){ //插入散列表
        if (!H->TheCells[pos].FileNo) //新单词
            strcpy(H->TheCells[pos].Element, key);
        H->TheCells[pos].FileNo = FileNo; //更新最近文件
//将文件编号插入倒排索引表,相当于链表插入新节点的操作
        F = malloc(sizeof(FList));
        F->FileNo = FileNo;
        F->Next = H->TheCells[pos].InvIndex;
        H->TheCells[pos].InvIndex = F;
        return pos; //插入成功,返回单词位置
    }
    else
        return -1; //同一文件重复单词,不插入
}

将单词在散列表中的位置存入文件索引表:

void FileIndex(WList *File, int FileNo, int pos){
    WList *W;
    if (pos < 0)
        return; //重复的单词不处理
//插入索引表
    W = malloc(sizeof(WList));
    W->words = pos;
    W->Next = File[FileNo-1].Next;
    File[FileNo-1].Next = W;
    File[FileNo-1].words++; //头结点累计词汇量
}

计算两个文件之间的相似度:

double work(WList *File, int F1, int F2, HashTable *H){
    int temp;
    WList *W;
    FList *F;
    if (File[F1-1].words > File[F2-1].words){
        temp = F1;
        F1 = F2;
        F2 = temp;
    } //选择词汇量较小的那个文件作为文件索引表的文件
    temp = 0; //统计公共词汇量
    W = File[F1-1].Next; //扫描文件的词汇索引表
    while (W) {
//找到当前单词在散列表中的位置
        F = H->TheCells[W->words].InvIndex;
        while (F) { //扫描该单词的倒排索引表
            if (F->FileNo == F2) //如果该单词也在另一个文件中
                break;
            F = F->Next;
        }
        if (F)
            temp++; 说明该单词是公共的
        W = W->Next;
    }
//两文件的词汇总量 = 两文件词汇量的和 - 公共词汇量
    return ((double)(temp * 100)/ (double)(File[F1 - 1].words + File[F2 - 1].words - temp));
}

主程序部分:

int main(){
    int n, m, f1, f2;
    ElementType word;
    HashTable *H;
    WList *File;
    scanf("%d", &n);
    File = FileIndex_Init(n);
    H = Table_Init(MAXTable); //创建一个散列表
    for (int i = 0; i < n; i++) //读入并索引每个文件
        while(GetWord(word))
            FileIndex(File, i + 1, InsertAndIndex(i+1, word, H));
    scanf("%d", &m);
    for (int i = 0 ; i < m; i++){ //处理每条查询
        scanf("%d %d", &f1, &f2);
        printf("%.1f%c\n", work(File, f1, f2, H), '%');
    }
    return 0;
}
7-44 基于词频文件相似度 (30分)
qq_45798109的博客
09-10 955
实现一种简单原始文件相似度计算即以文件公共词汇词汇比例定义相似度。为简化问题,这里不考虑中文(因为分词太难了),只考虑长度不小于3、且不超过10的英文单词,长度超过10的只考虑前10个字母。 输入格式: 输入首先给出正整数N(≤100),为文件数。随后按以下格式给出每个文件的内容:首先给出文件正文,最后在一行中只给出一个字符#,表示文件结束。在N个文件内容结束之后,给出查询数M(≤10^​4​​ ),随后M行,每行给出一对文件编号,其间以空格分隔。这里假设文件按给出的顺序从1到N编号。
基于词频文件相似度
weixin_43959948的博客
03-09 1754
实现一种简单原始文件相似度计算, 即以文件公共词汇词汇比例定义似 度。为简化问题, 这里不考虑中文(因为分词太难了), 只考虑长度不小于1000个英文单 词的文章, 长度超过10字母的单词只考虑前10个字母。 输入格式: 给出要检查的元素英文文本文件文件夹位置 输出格式: 1, 以表格形式给出该文件夹下文件相似度数值 2, 可以查询文件公共词汇(按装英文顺序输出) 说明...
数据结构课程设计-基于词频文件相似度
07-15
本课程设计是大一下学期的课设。代码是C++写的,主要使用了map容器,短小精悍(答辩成绩评级为A)(重要部分几乎每行都有注释,附赠报告)。 ———————————————————————————————————————— 主要功能有:命令1,用户输入2个文件名,导入文件到内存中,展示2个文件内容。命令2,开始对文件分词,展示分词结果。命令3,建立倒排索引表(设计哈希函数实现),展示索引结果。命令4,展示2个文件相似度公共词汇。 ————————————————————————————————————————
PTA 数据结构与算法 7-44 基于词频文件相似度
番大白菜
07-12 1451
如有不对,不吝赐教 进入正题: 实现一种简单原始文件相似度计算即以文件公共词汇词汇比例定义相似度。为简化问题,这里不考虑中文(因为分词太难了),只考虑长度不小于3、且不超过10的英文单词,长度超过10的只考虑前10个字母。 输入格式: 输入首先给出正整数N(≤100),为文件数。随后按以下格式给出每个文件的内容:首先给出文件正文,最后在一行中只给出一个字符#,表示文件结束。在N个...
进阶实验5-3.3 基于词频文件相似度 (30 分)
qq_45471462的博客
08-01 722
进阶实验5-3.3 基于词频文件相似度 进阶实验5-3.3 基于词频文件相似度 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown
哈希词频统计
04-28
哈希表对较大文件的单词进行排序 结果输出到一个txt文件里 出现次数不一样按出现次数排序 出现次数一样按字典顺序排序
CosineSimilarity:提供了计算个具有双值的哈希图之间的余弦相似度的方法
07-01
在Java编程环境中,我们可以使用特定的算法和方法来计算个双值哈希图之间的余弦相似度。这里,我们将深入探讨余弦相似度的概念、计算方式以及在Java中的实现。 余弦相似度的基础是向量空间模型,其中每个文档或...
基于NLP的文本相似度检测方法.docx
05-29
例如,利用哈希技术将文本转换为数字指纹,然后通过Jaccard系数来计算相似度等。 ### 结论 基于NLP的文本相似度检测方法是自然语言处理领域的一项关键技术。本文通过对现有方法的深入分析,提出了面向文本的相似度...
PTA数据结构与算法编程题目集 7-44 基于词频文件相似度 (30 分)
qq_43189757的博客
03-27 1582
7-44 基于词频文件相似度 (30 分) 实现一种简单原始文件相似度计算即以文件公共词汇词汇比例定义相似度。为简化问题,这里不考虑中文(因为分词太难了),只考虑长度不小于3、且不超过10的英文单词,长度超过10的只考虑前10个字母。 输入格式: 输入首先给出正整数N(≤100),为文件数。随后按以下格式给出每个文件的内容:首先给出文件正文,最后在一行中只给出一个字符#,表示文...
哈希算法-求文档相似度
03-29
The book is based on Stanford Computer Science course CS246: Mining Massive Datasets (and CS345A: Data Mining). The book, like the course, is designed at the undergraduate computer science level with no formal prerequisites. To support deeper explorations, most of the chapters are supplemented with further reading references. The Mining of Massive Datasets book has been published by Cambridge University Press. You can get a 20% discount by applying the code MMDS20 at checkout. By agreement with the publisher, you can download the book for free from this page. Cambridge University Press does, however, retain copyright on the work, and we expect that you will obtain their permission and acknowledge our authorship if you republish parts or all of it. We welcome your feedback on the manuscript.
基于词频文件相似度-算法应用
ଳxin的博客
03-04 1975
一、问题引入: 二、分析: 1.首先,我们从题目得知: 文件相似度 = 公共词汇 / 词汇 2.注意的地方: 不考虑中文,文章里只考虑有英文。 3.输入: txt文件所在的文件夹目录 三、代码分析: 看代码 : 一般从main函数开始(程序入口同样也是main函数) 1. 函数1 :在指定文件夹下找到对应的文件类型(后缀)的所有文件名称。 所有文件名称保存...
PTA 7-44 基于词频文件相似度(字符串处理+set容器)
Veeupup博客
04-11 416
本题考点: 字符串处理 set 容器使用 实现一种简单原始文件相似度计算即以文件公共词汇词汇比例定义相似度。为简化问题,这里不考虑中文(因为分词太难了),只考虑长度不小于3、且不超过10的英文单词,长度超过10的只考虑前10个字母。 输入格式: 输入首先给出正整数N(≤100),为文件数。随后按以下格式给出每个文件的内容:首先给出文件正文,最后在一行中只给出一个字符#,表示...
基于词频文件相似度 (30分)
黄大仙
10-06 1748
实现一种简单原始文件相似度计算即以文件公共词汇词汇比例定义相似度。为简化问题,这里不考虑中文(因为分词太难了),只考虑长度不小于3、且不超过10的英文单词,长度超过10的只考虑前10个字母。 输入格式: 输入首先给出正整数N(≤100),为文件数。随后按以下格式给出每个文件的内容:首先给出文件正文,最后在一行中只给出一个字符#,表示文件结束。在N个文件内容结束之后,给出查询数M(≤10​4​​),随后M行,每行给出一对文件编号,其间以空格分隔。这里假设文件按给出的顺序从1到N编号。 输出
PTA 7-44 基于词频文件相似度 (30 point(s))
Atl212的博客
08-07 595
实现一种简单原始文件相似度计算即以文件公共词汇词汇比例定义相似度。为简化问题,这里不考虑中文(因为分词太难了),只考虑长度不小于3、且不超过10的英文单词,长度超过10的只考虑前10个字母。 输入格式: 输入首先给出正整数N(≤100),为文件数。随后按以下格式给出每个文件的内容:首先给出文件正文,最后在一行中只给出一个字符#,表示文件结束。在N个文件内容结束之后,给出查询数M(≤104),随后M行,每行给出一对文件编号,其间以空格分隔。这里假设文件按给出的顺序从1到N编号。 输出
7-44 基于词频文件相似度 (30 分)
qq_43209531的博客
05-05 4186
实现一种简单原始文件相似度计算即以文件公共词汇词汇比例定义相似度。为简化问题,这里不考虑中文(因为分词太难了),只考虑长度不小于3、且不超过10的英文单词,长度超过10的只考虑前10个字母。 输入格式: 输入首先给出正整数N(≤100),为文件数。随后按以下格式给出每个文件的内容:首先给出文件正文,最后在一行中只给出一个字符#,表示文件结束。在N个文件内容结束之后,给出查询数M...
7-44 基于词频文件相似度 (30 分)
weixin_42129912的博客
11-09 843
7-44 基于词频文件相似度 (30 分) 实现一种简单原始文件相似度计算即以文件公共词汇词汇比例定义相似度。为简化问题,这里不考虑中文(因为分词太难了),只考虑长度不小于3、且不超过10的英文单词,长度超过10的只考虑前10个字母。 输入格式: 输入首先给出正整数N(≤100),为文件数。随后按以下格式给出每个文件的内容:首先给出文件正文,最后在一行中只给出一个字符#,表示文...
进阶实验5-3.3 基于词频文件相似度
weixin_51442864的博客
02-25 528
题目链接 思路:既然要统计词频,那我们可以选择将单词存到哈希表里,然后在文件里存单词的地址,在需要对比时直接通过指针访问该单词,此外,我将每个文件按其指针所指向的单词的字典序将指针排好序,这样在文件进行比对时可以按顺序依次比较过去,节省了一定的时间,其他还有要处理的细节如注释所示. 2021/02/25 19:32:54 答案正确 30 编程题 C++ (g++) 208 ms 测试点 提示 结果 分数 耗时 内存 0 sample 答案正确 18 19 ms 12080 KB 1 同一文件内重复出
写文章

热门文章

  • 软件开发过程与项目管理(5.软件项目任务分解) 7744
  • 哈希 基于词频的文件相似度 5781
  • 幻方 4911
  • 软件开发过程与项目管理(7.软件项目进度计划) 4450
  • 软件开发过程与项目管理(8.软件项目质量计划) 3535

分类专栏

  • 论文 1篇
  • 踩坑笔记 2篇
  • Kaggle+PyTorch之旅 1篇
  • 软件开发过程与项目管理 16篇
  • 杂记 2篇
  • 编译原理 1篇
  • 算法设计与分析 3篇
  • 操作系统 1篇
  • python网络爬虫 3篇
  • 数据结构 14篇
  • 深度学习 1篇
  • docker 1篇
  • ACM 8篇

最新评论

  • 幻方

    Juassin: 你好,我想问一下斯特雷奇法的第3点“在B象限任一行的中间格,自右向左,标出k-1列”,自右向左的话代码这部分 int temp = matrix[i][m + m / 2 + j]; matrix[i][m + m / 2 + j] = matrix[i + m][m + m / 2 + j]; matrix[i + m][m + m / 2 + j] = temp; 为什么是加j的?

  • 洛谷 P1014 Cantor表

    Saa Zaak-Lei: 头文件直接用一个<bits/stdc++.h>不香吗表情包

  • 幻方

    445648515: 是电脑的问题,配置的差异

  • 幻方

    hard rookie: 为什么你的程序打印20万个都只要几十秒,我的打印几千个就花了几十秒啊,是编译器问题吗,和你一样的代码

  • 哈希 基于词频的文件相似度

    weixin_53583966: 可不可以讲一下那个索引表那一块儿呀

最新文章

  • KDD2023 | Adaptive Graph Contrastive Learning for Recommendation | 用于推荐的自适应图对比学习
  • Stanford CoreNLP 使用Python调用时无法连接(psutil._exceptions.AccessDenied: psutil.AccessDenied)
  • Kaggle入门——Titanic(一)
2023年1篇
2021年13篇
2020年16篇
2019年24篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家雕刻玻璃钢雕塑作品欣赏安阳景观园林玻璃钢仿铜雕塑扬州玻璃钢卡通雕塑优惠鹤壁肖像校园玻璃钢景观雕塑制作驻马店玻璃钢花盆广场玻璃钢雕塑多少钱陕西卡通玻璃钢造型雕塑制作广东常用商场美陈费用深圳玻璃钢花盆厂家直销四川超市商场美陈哪里有池州5米玻璃钢牛雕塑商场挂饰美陈香港商场新年美陈佛山城市雕塑玻璃钢玻璃钢马雕塑广场园林东莞迎宾玻璃钢雕塑东莞玻璃钢喷泉雕塑株洲玻璃钢雕塑设计价格多少钱杭州现代人物玻璃钢雕塑玻璃钢酒桶雕塑东莞透明玻璃钢雕塑摆件广州玻璃钢抽象雕塑批发玻璃钢艺术雕塑性价比南安玻璃钢雕塑定制云南太湖石玻璃钢仿铜雕塑南京商场美陈制作保定玻璃钢仿真水果雕塑厂家吉林欧式玻璃钢雕塑定制金山区通用玻璃钢雕塑安阳玻璃钢雕塑价格报价香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化