POJ 2408 Anagram Groups(字典树hash)

poj2408 字符串处理,排序 #include #include #include #include #include #include using namespace std; struct node{ string a,b; }a[30005],g[30005]; struct nod{ string a,b; int n; }c[30005]; bool Cmp(node a,node b){ return a.a<b. 阅读详情

题意:

给定若干个字符串,将其分组,按照组成元素相同为一组,输出数量最多的前5组,每组按照字典序输出所。
有字符串。数量相同的输出字典序较小的一组。

注意:

每个输出时每个字符串只能出现一次。

解析:

可以先将所有的字符串利用字典树hash,并利用vector进行保存。
然后对vector进行标号,这样只要对标号进行排序,而不用对vector进行排序。效率大大提高。

my code

#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>
#include <vector>
#define pb push_back 
using namespace std;
const int maxnode = 50005;
const int sigma_size = 26;

struct Trie {
    int ch[maxnode][sigma_size];
    int val[maxnode];
    int sz, clock;
    void clear() { clock = sz = 1; memset(ch[0], 0, sizeof(ch[0]));}
    Trie() { clear(); }
    int idx(char c) { return c - 'a'; }

    int hash(const char *s) {
        int u = 0, n = strlen(s);
        for(int i = 0; i < n; i++) {
            int c = idx(s[i]);
            if(!ch[u][c]) {
                memset(ch[sz], 0, sizeof(ch[sz]));
                val[sz] = 0;
                ch[u][c] = sz++;
            }
            u = ch[u][c];
        }
        if(!val[u]) val[u] = clock++;
        return val[u];
    }
} trie;

int idx[maxnode];
vector<string> ans[maxnode];

bool cmp(int lhs, int rhs) {
    if(ans[lhs].size() != ans[rhs].size())
        return ans[lhs].size() > ans[rhs].size();
    if(ans[lhs].size() != 0)
        return ans[lhs][0] < ans[rhs][0];
}

void init() {
    trie.clear();
    for(int i = 0; i < maxnode; i++)
        ans[i].clear();
}

string str, save;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    init();

    while(cin >> str) {
        save = str;
        sort(save.begin(), save.end());
        int u = trie.hash(save.c_str());
        ans[u].pb(str);
    }

    for(int i = 1; i < trie.clock; i++)
        idx[i] = i;
    sort(idx+1, idx+trie.clock, cmp);

    for(int i = 1; i <= 5; i++) {
        int id = idx[i], size = ans[id].size();
        if(size == 0) break;
        cout <<"Group of size " << size << ": ";
        sort(ans[id].begin(), ans[id].end());
        for(int j = 0; j < size; j++) {
            if(j == 0 || ans[id][j] != ans[id][j-1])
                cout << ans[id][j] << " ";
        }
        cout << "." << endl;
    }
    return 0;
}
【深度学习】通俗易懂讲解循环神经网络LSTM 目录 1、循环神经网络(Recurrent Neural Networks) 2、长依赖存在的问题 3、LSTM 网络 4、LSTMs的核心思想 5、一步一步理解LSTM 6、LSTM的变种 7、总结 1、循环神经网络(Recurrent Neural Networks) 人对一个问题的思考不会完全从头开始。比如你在阅读本片文章的时,你会根据之前理解过的信息来理解下面看到的文字。... 阅读详情

相关推荐

时间序列学习(4):平稳性检验(单位根检验、ADF检验)

时间序列学习(4):平稳性检验(单位根检验、ADF检验)1、单位根检验2、ADF检验3、指数走势的检验4、对数收益率序列检验 相关图可以大致判断序列是否平稳。但是,这毕竟不是严格的。 这篇笔记来就谈一谈平稳性的检验。 到目前为止,我们有了以下的时间序列模型: 白噪声; 随机游走; AR模型; MA模型; ARMA模型。 我们知道白噪声、MA模型一定是平稳的(这里的平稳都是弱平稳);随机游走一定是不平稳的;ARMA模型取决于其AR部分。 所以唯一需要做平稳性检验的就是AR模型。 1、单位根检验 先来看一阶

lucialucia的博客 7万+

( 字符串专题 )【 字符串hash 】

( 字符串专题 )【 字符串hash 】 #include <bits/stdc++.h> using namespace std; typedef unsigned long long ull; ull base=233317; //or 827 ull base2=200379; //or 1127 ull pwd[2005]; char s[2005][2005], t[2005][2005]; int n,m,N,M; int main() { /* const .

石旭先森的博客 586

Investigating Bi-Level Optimization for Learning and Vision from a Unified Perspective: A Survey and

文章首先从双层优化的角度统一表示了超参数优化、多任务和元学习等复杂学习和视觉问题,建立了一个基于最佳响应的单层重构和一个统一的算法框架,来制定一个基于梯度的双层优化方法,最后讨论了该框架的潜力和未来研究方向。...

dawnyi_yang的博客 1110

对字符串进行Hash分类

最近在做一些基础的网络开发,需要自行设计负载均衡方案。因为需要根据某个字段做会话保持,此处的做法是对这个字段做Hash,根据Hash值在服务列表数组中选择一个机器。1.client启动时在配置文件列表中列出所有server机器,启动后与所有server机器建立rpc连接,并保持一个1次/秒的心跳连接做健康检查。3.新的消息进来,根据目的ID进行Hash运算,根据算出来的hash值,从注册列表中拿到机器IP端口进行转发。2.将健康检查通过的机器按配置顺序放到注册发现列表中。

敬斋99的博客 326

智慧社区:安防系统解决方案

智慧社区:安防系统解决方案

s13166803785的博客 431

TI硬件笔试面试题型解析上

摘要: 本专栏聚焦大厂硬件笔试面试题解析,当前第14期以德州仪器(TI)为例,涵盖模拟电路与数字电路核心考点。模拟电路部分涉及最大功率传递定理、运放设计(虚短/虚断)、共模抑制比(CMRR)及高频PCB信号完整性;数字电路包括CMOS与TTL对比、建立/保持时间、竞争冒险消除、D触发器分频及“线与”逻辑实现。文章强调通过例题掌握解题方法与知识点,助力读者应对硬件工程岗位的笔试与面试挑战,附常见考点总结与实用建议。全文注重理论与实践结合,提供典型题型解析与设计思路。(150字)

启芯硬件的博客 950

对字符串分组聚合

1、用HashSet分组(唯一),HashMap聚合(k,v) /* 统计一串字符串当中每个字母出现的个数 给定字符串abacba */ ArrayList<String> list = new ArrayList<>();//abacba list.add("a"); list.add("b"); list.add("a"); list.add("c"); list.add("b"); list.add("a"); //分组 HashSet&...

weixin_44778537的博客 390

「UG/NX」Block UI 曲线收集器CurveCollector

曲线收集器块用于选择一条或多条曲线,包括通过选择意图连接的末端曲线链。曲线选择意图用于此块,但它不支持“交点处停止”、“跟随圆角”、“中间链”和“特征内链”等规则选项。

何曾参静谧的博客 1090

字符串哈希

//hash一般用来解决字符串判重/字符串匹配问题 //遇见不定长问题可通过二分+hash降低复杂度 //遇见定长字符串问题可通过尺取+hash来降低复杂度 //二维hash的时候尺取方法就是把之前不需要的都变为0再加上当前行,将匹配字符串整体下移,来验证hash值是否相等 //---------------------------------单Hash----------------------...

Stormjing的博客 911

ElectrolyteGPT:首个电池电解液逆向设计的生成式 AI 系统 —— 算法原理与复现解析

数据驱动的重要性:1100 万→100 万的精心筛选,比单纯增大模型更有效领域适配:fLine 表示法、正则分词、化学感知的数据增强(SMILES randomization)都是关键小模型的力量:6M 参数在特定化学空间的表现,远超通用大模型在相同任务上的零样本能力条件生成的极限:10 维条件导致模型崩溃,提示我们需要更好的条件编码策略(如 diffusion guidance、RLHF-style 偏好优化)未来方向配方实验验证。

ASKCOS博客 123

基于双目视觉的行车中障碍距离检测方法研究与目标跟踪

本文将介绍基于Python语言的双目视觉技术,以及如何使用该技术检测行车中的障碍物并跟踪目标。双目视觉利用两个摄像头模拟人眼的立体视觉,通过对两个摄像头所捕捉的图像进行比较和分析,可以得到物体的深度信息。首先,我们需要安装Python的OpenCV库,该库提供了丰富的图像处理和计算机视觉功能。接下来,我们进入一个循环中,不断读取左右图像,并将其转换为灰度图像。在视差图上,您可以实现目标检测和跟踪算法来识别和跟踪行车中的障碍物。请注意,上述代码只是一个简单示例,您可以根据具体需求和算法进行修改和扩展。

ZgnObjectivec的博客 276

POJ2408 模拟排序、char[]操作、利用hash优化

1 题意 给定若干个字符串,将其分组,按照组成元素相同为一组,输出数量最多的前5组,数量相同的输出字典序较小的一组,每组按照字典序输出所有字符串,不输出重复的字符串。 2 分析 主要用到了strcmp()、strncpy()或者strcpy()、sort。 应该加hash优化,明天再补。 代码二 没有优化的。 3 代码二 #include #include #include

他的博客 478

如何实现一个用STM32F103C8T6作为主控芯片,加上AD8232、MAX30102 、MPU6050模块的用于运动中监测心率变异性??

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1212

字符串依据元素分组 Trie+hash POJ 2408 Anagram Groups

http://poj.org/problem?id=2408 题意: 给定若干个字符串,将其分组,按照组成元素相同为一组,输出数量最多的前5组,每组按照字典序输出所。  有字符串。数量相同的输出字典序较小的一组。 注意: 每个输出时每个字符串只能出现一次。 解析: 可以先将所有的字符串利用字典树hash,并利用vector进行保存。  然后对vector进行标号

ACM_10000h的专栏 928

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

POJ 2408 Anagram Groups(Trie+思维)

给出多个单词,每个单词的长度没说(差评),每个单词只要所有的字母相同可以认为是同一个单词,将所有的同一个单词放入集合中,输出前 5 个集合数量最大的集合 注意:若一个集合中只有一个单词 word,不能说明 word 只出现过一次 题目不难,但是处理起来有几个坑点 题目可以用 map+set 过,但是常数较大,我们采用字典树,将每一个单词在树上的标记作为桶 将不同的字符串转化为字典序最小的,可以采用快排,这里采用基数排序 可能是 set 里面有 const 修饰的形参,所以 cmp 函数...

C_Dreamy的博客 674

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

poj——2408——Anagram Groups

Description World-renowned Prof. A. N. Agram's current research deals with large anagram groups. He has just found a new application for his theory on the distribution of characters in English lang

清溪浅水 1447

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Anagram Groups POJ - 2408(字典树)

世界著名的A.N.Agram教授目前的研究涉及大型变位词组。他刚刚发现了一个新的应用,为他的理论在英语文本中的字符分布。给定这样的文本,您将找到最大的变位词组。 文本是一系列单词。一个单词w是一个单词v的变位词,如果且仅当字符位置的某些排列p带w到v时。那么,w和v在同一个变位词组中。变位词组的大小是该组中的单词数。找到5个最大的变位词组。 ...

博客 449

POJ-2408 Anagram Groups-字典序取最大前五

Anagram Groups Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4906   Accepted: 1319 Description World-renowned Prof. A. N. Agram's current research deals with

Some. 1677

POJ 2408 Anagram Groups 字母排序

点击打开链接 Anagram Groups Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3807   Accepted: 1015 Description World-renowned Prof. A. N. Agram's current resea

代码改变世界,keep coding。 2424

【POJ 2408 Anagram Groups】 字典树(Trie树)

POJ2408 本题题意是,把可以通过重新排列变成相同单词的单词放入一个集合,最后按找集合元素由多到少输出前五个集合,如果几何元素相同,按照字典序由小到大输出 我们考虑,如果两个单词可以通过重新排列组合变成相同单词,那么他们的字典序最小的排列方式一定是相同的,所以我们可以利用每个元素的最小排列方式判定是否在同一个集合,字典树在这里用于判定某个字符串时候出现过。最后用set来保存以便维持字典序 ...

lajiyuan的博客 495

poj 2408 Anagram Groups(hash)

题目链接:poj 2408 Anagram Groups 题目大意:给定若干个字符串,将其分组,按照组成元素相同为一组,输出数量最多的前5组,每组按照字典序输出所 有字符串。数量相同的输出字典序较小的一组。 解题思路:将所有的字符串统计字符后hash,排序之后确定每组的个数并且确定一组中字典序最小的字符串。根据个数 以及字符串对组进行排序。 #include #incl

不慌不忙、不急不躁 1736

POJ-2408 Anagram Groups(字符串排序问题)

点我看题目 题目大意 输入多个单词,相同字母异序词归为一组,按照每组单词数量从大到小输出前5组(不够全输出),两组数量相同则按照字典序输出,并按照字典序输出每组的单词。 思路 先将每个单词s1的每个字母按照字典序排序(目的是使单词同源)得到s2,并把排序前后的两个字符串打包到一个结构体中。然后按照优先s2,其次s1的规则sort排序,得到有序(字典序)的一组结构体数组。for循环遍历找出有几组相同...

Here_SDUT的博客 383

POJ - 2408 Anagram Groups(让人窒息的字符串桶排序)

Anagram GroupsTime Limit: 1000MS Memory Limit: 65536KDescriptionWorld-renowned Prof. A. N. Agram's current research deals with large anagram groups. He has just found a new application for his theory...

x__1998的博客 1293

POJ 2408:Anagram Groups

这题用了两个sort,大sort是把每个等价类先排到相邻的位置上去,第二个sort在等价类内部排序,第三个 sort 将 等价类排序。 //这题要考虑的太多,主要的一点是重复单词只输出一次但是计算Group size的时候要重复计算 #include #include #include using namespace std; struct word0 { char conten[500];

米周奇的博客 558

poj—2408—Anagram Groups

题目链接 做了好久,没有注意到的一点就是不仔细看样例,害我弄了这么长时间,下次一定注意, 看样例, 看样例, 看样例。 ac代码: #include &lt;algorithm&gt; #include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;cstdio&gt; #include &lt;math.h&gt; ...

兜率工的博客 351

POJ 2408 Anagram Groups 笔记

有相同字母组成但排列不同的单词为同一类。在已知字典中找出前五位的最大的类,和他的成员。

woniupengpeng的专栏 349
上一篇: POJ 1816 Wild Words(字典树+dfs)
下一篇: POJ 2513 Colored Sticks(欧拉回路+字典树+并查集)
HelloWorld10086
博客等级 码龄12年 88粉丝 614原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值