清华数据结构重名剔除AC100
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相关推荐
- 清华OJ重名剔除(Deduplicate)
重名剔除(Deduplicate) Description Mr. Epicure is compiling an encyclopedia of food. He had collected a l ...
- MOOC数据结构(下)(自主模式)-重名剔除(Deduplicate)
重名剔除(Deduplicate) Description Mr. Epicure is compiling an encyclopedia of food. He had collected a l ...
- PA9题解报告——重名剔除(Deduplicate)
数据结构与算法实验2020夏第二批(中国石油大学) PA9题解报告--重名剔除(Deduplicate) 目录 题目描述 题目分析 编码实现 一.题目描述 1. 描述 Epicure先生正在编撰一本美 ...
- 重名剔除(Deduplicate)
重名剔除(Deduplicate) 描述 Epicure先生正在编撰一本美食百科全书.为此,他已从众多的同好者那里搜集到了一份冗长的美食提名清单.既然源自多人之手,其中自然不乏重复的提名,故必须予以筛 ...
- TsinghuaOj Programming Assignment #3.3 重名剔除(Deduplicate)
重名剔除(Deduplicate) 描述 Epicure先生正在编撰一本美食百科全书.为此,他已从众多的同好者那里搜集到了一份冗长的美食提名清单.既然源自多人之手,其中自然不乏重复的提名,故必须予以筛 ...
- 清华数据结构真二叉树重建AC100
该题难点主要在于如何判断哪边是左子树,哪边是右子树 假设先序序列为a[maxn],后序序列为b[maxn] 对于类似数据为 13 1 2 4 6 10 9 12 13 7 11 8 5 3 10 12 ...
- 不同模块下包重名怎么解决_模块
模块 1. 模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py.模块可以被别的程序引入,以使用该模块中的函数等功能. 2. 当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导 ...
- android id 重名_Android App 自定义权限重名不能安装解决办法
场景1. A 应用 有两个版本 第一个 正式版 第二个测试版 测试版的包名 = 正式版+test ,在Android studio 中 也就是 applicationId . 两个版本都可以成 ...
- Ajax实现简单用户名重名查询
很早就想发布这篇POST了,Ajax实现简单用户名重名查询,引用了xmlhttprequest object pool,如下: XMLHttpRequest Object Pool /** * XM ...
最新文章
- 【机器学习】--隐含马尔科夫模型从初识到应用
- Spring 源码阅读 之 Spring框架加载
- Redis 如何保持和MySQL数据一致【一】
- 06.德国博士练习_08_query_dsl
- xen虚拟机克隆命令
- docker 搜寻 包 版本_ubuntu16.04下安装docker容器
- MySQL 数据库误删除后的数据恢复操作说明
- 场景编辑器开发第五天,设计架构重回flash,很多问题不是出在技术上而是策划上
- wps文档设置页眉左右(奇偶页)不同内容
- 操作ADS1115进行4个通道AD值的读取
- 关于c#实现影音嗅探的问题
- 禁止收录与跟踪-- Robots 文件优化和Nofollow 优化
- 验证银行卡号是否合法
- Java程序员校招蚂蚁金服,微信抢红包实战案例,纯干货
- C1认证学习六(HTTPS)
- 百度快排探究(一),Python selenium 实现自然搜索访问目标网站
- linux查看内存、cpu占用情况
- from表单点击submit提交后没有反应
- win7点击计算机不现实光驱,Win7光驱读不出光盘的解决方法
- 网络诊断工具解决无法上网的问题.
热门文章
- 解决近场感知痛点,侧向补盲激光雷达“上车”在即
- iOS11 初识ARKit
- WooCommerce Memberships 中文汉化版会员系统插件版下载
- 模板类的动态模板特化
- Whole.Tomato.Visual.Assist.X.v10.9.2118.0-CRD
- java redis计数器_使用Redis原子计数器incr实现限速器功能
- Win11提示这台电脑不符合安装此版本的Windows所需的最低系统要求解决办法
- 【Day.js】一个轻量2KB的处理时间和日期的JavaScript 库,常用API记录与分享
- 2022年全球市场中等功率薄膜电容器总体规模、主要生产商、主要地区、产品和应用细分研究报告
- 开会类之六顶思考帽阅读感悟