hdu 1298 字典树 + DFS (模拟T9文本输入)
题意:
给你一些按键顺序,让你输出每一步中概率最大的那个单词,这里的概率计算方
法好好看看别弄错了,一开始就是因为弄错了,各种wa,比如 abc 1 ,ab 1,那么
ab 的概率就是2 ,而不是4,一开始我误认为是所有单词累加后再把每个单词的每个字母累加作为当前单词的概率的,结果各种wa。
思路:
先建一颗字典树,为了是节省内存,方便更新,和快速查询,其实hash也可以
,不过我自己一般都是用map去hasn,目测这个题目map去hash会TLE,因为要设计到拆串和各种mark,map是排序的,说远了,建树的时候记得更新概率值,然后就是暴力深搜,把每一个长度的都找出来,然后开个数组更新当前的最有和记录答案串,深搜的时候a,b,c...这样自然就是字典序.
#include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct Tree {Tree *next[26];int v; }Tree;Tree root; char now[111] ,ans_str[222][111]; int max[111] ,Key[111]; int jianzi[8] = {3 ,3 ,3 ,3 ,3 ,4 ,3 ,4};char mk[8][4] = {'a' ,'b' ,'c' ,'0' ,'d' ,'e' ,'f' ,'0','g' ,'h' ,'i' ,'0' ,'j' ,'k' ,'l' ,'0','m' ,'n' ,'o' ,'0' ,'p' ,'q' ,'r' ,'s','t' ,'u' ,'v' ,'0' ,'w' ,'x' ,'y' ,'z'};void Buid_Tree(char *str ,int vv) {int len = strlen(str);Tree *p = &root ,*q;for(int i = 0 ;i < len ;i ++){int id = str[i] - 'a';if(p -> next[id] == NULL){q = (Tree *) malloc(sizeof(root));q -> v = vv;for(int j = 0 ;j < 26 ;j ++)q -> next[j] = NULL;p -> next[id] = q;p = p -> next[id];}else{p = p -> next[id];p -> v += vv;}} }int Find(char *str) {int len = strlen(str);Tree *p = &root;int sum = 0;for(int i = 0 ;i < len ;i ++){int id = str[i] - 'a';p = p -> next[id];if(p == NULL) return -1;sum += p -> v;}return p -> v; }void DFS(int ii ,int n) {if(ii == n + 1) return;for(int i = 0 ;i < jianzi[Key[ii] - 2] ;i ++){now[ii-1] = mk[Key[ii] -2][i];now[ii] = '\0';int sum = Find(now);if(sum == -1) continue;if(sum > max[ii]){max[ii] = sum;for(int j = 0 ;j <= ii ;j ++)ans_str[ii][j] = now[j];}DFS(ii + 1 ,n);} }int main () {int t ,n ,m ,i ,vv ,cas = 1;char str[111];scanf("%d" ,&t);while(t--){for(i = 0 ;i < 26 ;i ++)root.next[i] = NULL;scanf("%d" ,&n);while(n--){scanf("%s %d" ,str ,&vv);Buid_Tree(str ,vv);}scanf("%d" ,&m);printf("Scenario #%d:\n" ,cas ++);while(m--){memset(max ,255 ,sizeof(max));scanf("%s" ,str);int len = strlen(str);int last = str[len-1] - '0';for(i = 0 ,len --;i < len ;i ++)Key[i+1] = str[i] - '0';DFS(1 ,len);for(i = 1 ;i <= len ;i ++)if(max[i] == -1) puts("MANUALLY");else puts(ans_str[i]);puts("");}puts("");}return 0; }
hdu 1298 字典树 + DFS (模拟T9文本输入)相关推荐
- hust1350Trie【字典树+dfs || 字典树 + LCA】
大意:告诉你一些字符串 让你组成字典树, 然后定义每个节点到所有叶子节点的距离的和等于改点的value 当根节点只有一个孩子,该根节点也算一个叶子节点 问所有节点的value的最小值 分析: 开始做的 ...
- CodeForces - 979D Kuro and GCD and XOR and SUM(字典树+暴力+模拟)
题目链接:点击查看 题目大意:说实话看到这么复杂而且还是英文的题面我是拒绝的,但题还是得补啊,就去百度找的题解看题意,题意大概是这样的: 给出n个操作,每个操作分为两种类型: 1 x:向集合中插入x ...
- 2019 ICPC 南京 F. Paper Grading(字典树dfs序上树套树)
Paper Grading 题意:给定nnn个字符串,有两种操作: 一.给定i,ji, ji,j,交换第iii个跟第jjj个字符串. 二.给定 str ,k,l,rk, l, rk,l,r,问你在区间 ...
- CSU 1457 Boggle (字典树+DFS)
题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1457 读了一遍题想到了字典树,但不知道怎么写,队友一个单词一个单词的枚举,然后暴搜过 ...
- POJ 3764 Language: The xor-longest Path (01字典树+DFS)
传送门:POJ 3764 题目大意: 在树上找一段路径(连续)使得边权相异或的结果最大. 前置技能: 1.用链式前向星建图. 2. 01字典树的应用. 思路: 本题用 vector数组建图是会超时的, ...
- hdu 4099 字典树 + 斐波那契
题意: 给你一个串(最长40位)问你这个串是斐波那契F(n) n <= 99999中的那个数的前缀,如果存在多个输出最小的n否则输出-1. 思路: 给的串最长40位,那 ...
- Prefix HDU - 5790 字典树 + 主席树
传送门 文章目录 题意: 思路: 题意: 给你nnn个串,每次询问一个区间,返回这个区间的串的不同的前缀个数,强制在线. 思路: 碰到字符串前缀的问题,我们自然的想到用字典树来解决. 对于每个串,我们 ...
- HDU 1800(字典树)
简单的字典树水题,统计为单词前缀的单词数,取最大,注意要去前0,具体原理还是自己想想吧,最大数决定了最大分组. 诶 PKU月赛之后 我发现我只会水的 .............. #include&l ...
- HDU 5536 字典树
题意:就是公式. 这现场赛O(n^3)能过,觉得太没天理了. 做法:字典树,枚举两个数,然后在字典树上贪心的跑. #include <bits/stdc++.h>using namespa ...
最新文章
- sql 集合查询 数据更新操作语句
- springboot 集成logback
- 【福利派送】浪漫七夕,不可辜负!这 8 份礼物请收下!
- java resourcebundle_Java - Properties和ResourceBundle类学习
- C#控件绑定数据源方式
- 数据分析利器之Pandas
- 嵌入式基础(1)---硬件知识,搞嵌入式开发必备
- 汇编@data_汇编语言(4)--内存段
- 避免unicode字符被截断的方法
- 软件的接口设计图_软件工程中的分析、设计与实例
- 从入门到精通,C程序员必读的3本
- 我为什么要开始写博客
- Q3手机银行运营报告:直销银行江湖再起波澜,数字员工助力手机银行活跃度提升
- java 163邮箱发邮件_java用163邮箱发邮件的方式,步骤有哪些?
- 三菱FX5U以太网数据采集方案
- SAP 中Table的使用(一、显示数据)
- 灵活运用CSS开发技巧
- 事件分发(二)ViewGroup和View对触摸事件的分发流程
- 商城项目---(一)搭建
- CentOS7.6如何配置网桥?|CentOS7.6服务器配置网桥
热门文章
- 提高系统性能——对SQL语句优化的思考
- ecshop“发货查询”中加入收货人、收货地址、发货时间、配送方式
- Python爬虫(七)_非结构化数据与结构化数据
- Django-Model操作数据库(增删改查、连表结构)参考
- ResDepot CRC码
- etcd 集群故障(数据变成只读)
- 自动生成Hibernate框架结构
- [转载]玩转Asp.net MVC 的八个扩展点
- java 工厂的变形模拟的各种应用
- [JAVA_开课吧资源]第一周 Java语言概述、Java语言基础