字典树 hdu 1075

#include"stdio.h"
#include"ctype.h"
#include"stdlib.h"
#include"string.h"
#include"algorithm"
using namespace std;
struct Trie
{
	struct Trie * next[26];
	int flag;
};
char xx[1000005][15];   //数组要开1000000,题目没写那么清楚 
Trie * H = NULL;
Trie * init()
{
	Trie * l = new Trie;
	for(int i = 0;i < 26;i ++)
	{
		l ->next[i] = NULL;
	}
	l ->flag = 0;   //初始化为0 
	return l;
}
void Add(char * s,int x)
{
	Trie * l = H;
	int len = strlen(s);
	for(int i = 0;i < len;i ++)
	{
		int k = s[i] - 'a';
		if(l ->next[k] == NULL)
		{
			l ->next[k] = init();
		}
		l = l ->next[k];
	}
	l ->flag = x;    //存起来的时候标记成数组下标 ,查找方便 
};
void Cls(Trie * l)
{
	for(int i = 0;i < 26;i ++)
	{
		if(l ->next[i] != NULL)
		{
			Cls(l ->next[i]);
		}
	}
	free(l);
}
void Search(char * s)
{
	Trie * l = H;
	int len = strlen(s);
	int pl = 1;
	for(int i = 0;i < len;i ++)
	{
		int k = s[i] - 'a';
		if(l ->next[k] == NULL)
		{
			pl = 0;
			break;
		}
		l = l ->next[k];
	}
	if(l ->flag && pl)  //查找看有没有这个单词,有的话就输出对应下标的字符串,添加时的下标记录用上了 
	{
		printf("%s",xx[l ->flag]);
	}
	else  //没找到就输出自己 
	{
		printf("%s",s);
	}
}
int main()
{
	int a,b,c,d,pl = 0;
	char vv[30005];
	while(~scanf("%s",vv))
	{
		if(strcmp(vv,"START") == 0 && !pl)   //先保存到数组 ,下标从一开始,因为一会搜索要用 
		{
			H = init();
			pl = 1;
			int l = 1;
			while(1)
			{
				scanf("%s",xx[l]);
				if(strcmp(xx[l],"END") == 0)
				break;
				else
				{
					scanf("%s",vv);
					Add(vv,l);
					l ++;
				}
			}
		}
		else
		{
			getchar();    //加一个gechar(),因为上面是scanf结尾,要去掉一个回车 
			pl = 0;
			while(1)
			{
				char mm[20];
				gets(vv);
				if(strcmp(vv,"END") == 0)
				break;
				else
				{
					int l = strlen(vv);
					int k = 0;
					for(int i = 0;i < l;i ++)
					{
						if(isalpha(vv[i]))
						{
							mm[k++] = vv[i];
						}
						else
						{
							if(k > 0)   //在mm数组里有值得时候才去搜索,以为mm没有初始化 
							{
								mm[k] = '\0';
								Search(mm);
							}
							k = 0;   //个数归零 
							printf("%c",vv[i]);   //输出不是字母的东西,比如'.','!','?',' '之类的 
						}
					}
					printf("\n");
				}
			}
			Cls(H);   //清不清空都行,以为只有一个例子,但我习惯清空了 
		}
	}
	return 0;
}

http://acm.hdu.edu.cn/showproblem.php?pid=1075
(1)求职者端(Web 前端) 岗位浏览与搜索: 智能推荐首页:基于 “专业背景 + 求职意向” 推荐匹配岗位(如 “计算机专业硕士” 优先推荐 “高校计算机教师岗”“实验员岗”),展示岗位核心信息(学校名称、岗位名称、薪资范围、截止日期)。 多条件筛选:支持按 “岗位类型(教学岗 / 科研岗 / 行政岗)、学历要求(硕士 / 博士)、地区(华北 / 华东等)、学校层次(985/211 / 双非)” 组合筛选,结果按 “匹配度 / 发布时间 / 薪资” 排序。 岗位详情页:展示 “岗位职责、任职要求、福利待遇、应聘流程、联系人信息”,提供 “收藏岗位、一键投递简历、查看该岗位竞争热度(如‘已有 230 人投递’)” 功能。 个人求职中心: 简历管理:支持创建多版本简历(如 “教学岗专用简历”“科研岗专用简历”),包含 “基本信息、教育经历、科研成果、教学经验、获奖情况” 等模块,支持 PDF 导出和在线编辑。 应聘跟踪:记录 “已投递岗位、简历状态(已接收 / 筛选中 / 面试通知 / 已录用)、截止日期提醒”,对 “3 天内即将截止的岗位” 自动推送提醒。 竞争分析:针对已投递岗位,展示 “求职者学历分布(博士占比 75%)、专业匹配度排名(你的匹配度 85 分,超过 80% 竞争者)”,辅助评估自身竞争力。 (2)高校招聘负责人端(Web 管理端) 岗位管理: 岗位发布:填写 “岗位名称、招聘人数、学历要求、专业方向、岗位职责、薪资范围、应聘方式” 等信息,支持上传 “岗位说明书附件”,设置 “自动截止日期” 和 “简历接收邮箱”。 批量操作:对 “已过期岗位” 进行批量下架,对 “热门岗位(投递量>100)” 设置 “自动置顶”,支持 “岗位信息批量导出(Excel 格式)”。 简历筛选: 智能初筛:系统自动对投递简历进行 “匹配度评分”
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值