1.首先需要找打大于600000的最大素数,寻找素数的方法,我用的是比较笨的方法,就是用x的平方根以下的数y去除,若x%y全部都不为0,则为素数。

2.对每一个菜谱进行编码,我的编码方法如下,具体的编码方法大家可以随意!

int hashcode(char be_hash[40])
{int length= strlen(be_hash);int num = 0;for (auto i = 0; i < length; i++){num += (be_hash[i] - 96)*(i+1);}return num;
}

3.每输入一个菜谱,进行一次检查,检查的结果为result。

若从来没有输入,则result.bool_value=1;然后将值添加入链表数组中。

(这里需要注意的是,如果hashcode计算得到的值相同,则需要遍历链表以判断是否重复)

4.在检查时,会使result.chongfu++,然后通过这个来判断重复了几次,若重复了超过1次,chongfu的值会大于1.这时候重复的数值就不能加入rept_hash链表中。

5.最后遍历rept_hash链表,输出即可!

最后附上代码!

#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>
#include<string.h>
#define maxn 799999
using namespace std;
struct result {int bool_value;int chongfu;
};
//节点是指节点内容
struct listnode{listnode*pre, *succ;char*meal_name;int chongfu = -1;listnode(){}listnode(char*a,listnode*p1=NULL,listnode*p2=NULL):meal_name(a),pre(p1),succ(p2){}
};
//列表是包括多个节点的组合
int count = 0;
struct list {listnode*head, *tail;list() { init(); }void init(){head = new listnode;tail = new listnode;head->pre = NULL; head->succ = tail;tail->pre = head; tail->succ = NULL;}//每一个新节点都插入到head之后void insert_head(char*mealnm){auto p = new listnode(mealnm);p->succ = head->succ;head->succ->pre = p;p->pre = head;head->succ = p;}void insert_tail(char*mealnm){auto p = new listnode(mealnm);p->pre = tail->pre;tail->pre->succ = p;p->succ = tail;tail->pre = p;}result check_rpt1(char*mealnm);
};
char meal[600000][41];
list list_hash[maxn];
list rept_hash;
result list::check_rpt1(char*mealnm)
{auto p = this->head;result t;while ((p=p->succ) != this->tail){if (strcmp(p->meal_name, mealnm)==0){t.bool_value = 0;t.chongfu=++p->chongfu;return t;}}t.bool_value = 1;t.chongfu = 0;return t;
}
int hashcode(char be_hash[40])
{int length= strlen(be_hash);int num = 0;for (auto i = 0; i < length; i++){num += (be_hash[i] - 96)*(i+1);}return num;
}
int main()
{
#ifndef _OJ_freopen("reptmealin.txt", "r", stdin);
#endifint n,num,list_location,rept_num=0;scanf("%d", &n);for (auto i = 0; i < n; i++){scanf("%s", meal[i]);num = hashcode(meal[i]);list_location = num % maxn;int lenght = strlen(meal[i]);auto reslt = list_hash[list_location].check_rpt1(meal[i]);if (reslt.bool_value){list_hash[list_location].insert_head(meal[i]);//printf("\n");}else if (reslt.chongfu<1)rept_hash.insert_tail(meal[i]);else;}auto p = rept_hash.head;while ((p = p->succ) != rept_hash.tail){printf("%s\n", p->meal_name);}
}

清华数据结构重名剔除AC100相关推荐

  1. 清华OJ重名剔除(Deduplicate)

    重名剔除(Deduplicate) Description Mr. Epicure is compiling an encyclopedia of food. He had collected a l ...

  2. MOOC数据结构(下)(自主模式)-重名剔除(Deduplicate)

    重名剔除(Deduplicate) Description Mr. Epicure is compiling an encyclopedia of food. He had collected a l ...

  3. PA9题解报告——重名剔除(Deduplicate)

    数据结构与算法实验2020夏第二批(中国石油大学) PA9题解报告--重名剔除(Deduplicate) 目录 题目描述 题目分析 编码实现 一.题目描述 1. 描述 Epicure先生正在编撰一本美 ...

  4. 重名剔除(Deduplicate)

    重名剔除(Deduplicate) 描述 Epicure先生正在编撰一本美食百科全书.为此,他已从众多的同好者那里搜集到了一份冗长的美食提名清单.既然源自多人之手,其中自然不乏重复的提名,故必须予以筛 ...

  5. TsinghuaOj Programming Assignment #3.3 重名剔除(Deduplicate)

    重名剔除(Deduplicate) 描述 Epicure先生正在编撰一本美食百科全书.为此,他已从众多的同好者那里搜集到了一份冗长的美食提名清单.既然源自多人之手,其中自然不乏重复的提名,故必须予以筛 ...

  6. 清华数据结构真二叉树重建AC100

    该题难点主要在于如何判断哪边是左子树,哪边是右子树 假设先序序列为a[maxn],后序序列为b[maxn] 对于类似数据为 13 1 2 4 6 10 9 12 13 7 11 8 5 3 10 12 ...

  7. 不同模块下包重名怎么解决_模块

    模块 1. 模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py.模块可以被别的程序引入,以使用该模块中的函数等功能. 2. 当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导 ...

  8. android id 重名_Android App 自定义权限重名不能安装解决办法

    场景1. A 应用 有两个版本 第一个 正式版 第二个测试版    测试版的包名 = 正式版+test ,在Android studio 中 也就是 applicationId  . 两个版本都可以成 ...

  9. Ajax实现简单用户名重名查询

    很早就想发布这篇POST了,Ajax实现简单用户名重名查询,引用了xmlhttprequest object pool,如下: XMLHttpRequest Object Pool /**  * XM ...

最新文章

  1. 【机器学习】--隐含马尔科夫模型从初识到应用
  2. Spring 源码阅读 之 Spring框架加载
  3. Redis 如何保持和MySQL数据一致【一】
  4. 06.德国博士练习_08_query_dsl
  5. xen虚拟机克隆命令
  6. docker 搜寻 包 版本_ubuntu16.04下安装docker容器
  7. MySQL 数据库误删除后的数据恢复操作说明
  8. 场景编辑器开发第五天,设计架构重回flash,很多问题不是出在技术上而是策划上
  9. wps文档设置页眉左右(奇偶页)不同内容
  10. 操作ADS1115进行4个通道AD值的读取
  11. 关于c#实现影音嗅探的问题
  12. 禁止收录与跟踪-- Robots 文件优化和Nofollow 优化
  13. 验证银行卡号是否合法
  14. Java程序员校招蚂蚁金服,微信抢红包实战案例,纯干货
  15. C1认证学习六(HTTPS)
  16. 百度快排探究(一),Python selenium 实现自然搜索访问目标网站
  17. linux查看内存、cpu占用情况
  18. from表单点击submit提交后没有反应
  19. win7点击计算机不现实光驱,Win7光驱读不出光盘的解决方法
  20. 网络诊断工具解决无法上网的问题.

热门文章

  1. 解决近场感知痛点,侧向补盲激光雷达“上车”在即
  2. iOS11 初识ARKit
  3. WooCommerce Memberships 中文汉化版会员系统插件版下载
  4. 模板类的动态模板特化
  5. Whole.Tomato.Visual.Assist.X.v10.9.2118.0-CRD
  6. java redis计数器_使用Redis原子计数器incr实现限速器功能
  7. Win11提示这台电脑不符合安装此版本的Windows所需的最低系统要求解决办法
  8. 【Day.js】一个轻量2KB的处理时间和日期的JavaScript 库,常用API记录与分享
  9. 2022年全球市场中等功率薄膜电容器总体规模、主要生产商、主要地区、产品和应用细分研究报告
  10. 开会类之六顶思考帽阅读感悟