poj 2408 Anagram Groups(hash)

poj 2408 Anagram Groups(hash)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

题目链接:poj 2408 Anagram Groups

题目大意:给定若干个字符串,将其分组,依照组成元素同样为一组,输出数量最多的前5组,每组依照字典序输出所

有字符串。数量同样的输出字典序较小的一组。

解题思路:将全部的字符串统计字符后hash。排序之后确定每组的个数而且确定一组中字典序最小的字符串。依据个数

以及字符串对组进行排序。

#include <cstdio>
#include <cstring>
#include <vector>
#include <map>
#include <algorithm>

using namespace std;

const int maxn = 30005;
const int maxm = 30;
const int X = 30;
typedef unsigned long long ll;
typedef pair<ll,int> pii;

int N, M, E;
vector<pii> vec, grop;
vector<int> g[maxn];
char word[maxn][maxm], st[maxn][maxm];

inline ll Hash(char* s) {
    int len = strlen(s), c[maxm];
    memset(c, 0, sizeof(c));

    for (int i = 0; i < len; i++)
        c[s[i]-'a']++;

    ll ret = 0;
    for (int i = 0; i < 26; i++)
        ret = ret * X + c[i];
    return ret;
}

inline bool cmp (const pii& a, const pii& b) {
    if (a.second == b.second)
        return strcmp(st[a.first], st[b.first]) < 0;
    return a.second > b.second;
}

inline bool sort_by(const int& a, const int& b) {
    return strcmp(word[a], word[b]) < 0;
}

int main () {
    N = M = E = 0;
    vec.clear();
    grop.clear();

    while (scanf("%s", word[N]) == 1) {
        ll key = Hash(word[N]);
        vec.push_back(make_pair(key, N));
        N++;
    }
    sort(vec.begin(), vec.end());

    int cnt = 0;
    ll pre = -1;

    for (int i = 0; i < vec.size(); i++) {
        int idx = vec[i].second;
        if (vec[i].first != pre) {
            if (cnt)
                grop.push_back(make_pair(M++, cnt));
            cnt = 0;
            g[M].clear();
            pre = vec[i].first;
            strcpy(st[M], word[idx]);
        }

        cnt++;
        g[M].push_back(idx);
        if (strcmp(word[idx], st[M]) < 0)
            strcpy(st[M], word[idx]);
    }

    if (cnt)
        grop.push_back(make_pair(M++, cnt));
    sort(grop.begin(), grop.end(), cmp);

    for (int i = 0; i < min(5, (int)grop.size()); i++) {
        printf("Group of size %d: ", grop[i].second);
        int x = grop[i].first;
        sort(g[x].begin(), g[x].end(), sort_by);
        for (int j = 0; j < g[x].size(); j++) {
            if (j == 0 || strcmp(word[g[x][j-1]], word[g[x][j]]))
                printf("%s ", word[g[x][j]]);
        }
        printf(".\n");
    }
    return 0;
}

版权声明:本文博客原创文章。博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117633.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • [深度学习] FM & FFM 算法基本原理

    [深度学习] FM & FFM 算法基本原理在推荐系统和计算广告业务中,点击率CTR(click-throughrate)和转化率CVR(conversionrate)是衡量流量转化的两个关键指标。准确的估计CTR、CVR对于提高流量的价值,增加广告及电商收入有重要的指导作用。无论使用什么类型的模型,点击率这个命题可以被归纳到二元分类的问题,我们通过单个个体的特征,计算出对于某个内容,是否点击了,点击了就是1,没点击就是0。对于任何二元分类的问题,最后我们都可以归结到逻辑回归上面。早期的人工特征工程+LR(Logisti…

    2022年5月1日
    66
  • 互联网快讯:华为云正式推出区块链服务;猿辅导布局素质教育;轻松筹回应裁员

    互联网快讯:华为云正式推出区块链服务;猿辅导布局素质教育;轻松筹回应裁员国内要闻1、HarmonyOS2升级用户数突破1.2亿,平均每天超100万用户升级2、华为云正式推出区块链服务,单链支持每秒5万条商品信息上链3、荣耀CEO赵明:未来可能有上市计划,星耀公司不是荣耀子品牌4、顺丰回应被浙江省消保委点名:拟于9月29日下架“签收确认”增值服务产品5、轻松筹回应裁员:系因业务调整,所有人将按法律规定结算项目工资6、阿里云推出全球首个云定义存储产品,性能大幅提升300%教育培训1、国家发改委价格司:加强学科类校外培训收费监管工作2、猿辅

    2022年7月17日
    20
  • 音视频编解码常用知识点

    音视频编解码常用知识点目录视频播放器原理流媒体协议封装格式(容器)编解码转码帧(Frame)帧率(Framerate)分辨率比特率(码率)采样率采样位数声道数有损压缩和无损压缩帧内压缩和帧间压缩对称编码和不对称编码音频编码声音数字化三要素音频编码标准视频编码色彩空间RGB色彩空间YUV色彩空间压缩原理熵与冗余帧内编码…

    2022年7月13日
    26
  • 自动化测试+性能面试题整理–个人最新【持续更新】「建议收藏」

    自动化测试+性能面试题整理–个人最新【持续更新】「建议收藏」写在前面公司要求招一名自动化测试,能力要求不高,1年左右自动化经验+部分性能经验即可,让我出一份题,我就百度+公司项目遇到的问题,出了一份,出题整体思路是:接口自动化问题+性能问题+规划的ui、app自动化+整体质量体系建设等多方面考虑。下面是正题自动化测试面试题1:基础篇目的:验证求职者是否在自动化测试岗位有实际应用于生产的工作经验1、使用什么测试框架做的上一个项目的自动化测试?说下怎么…

    2022年9月29日
    2
  • OpenCV相机标定全过程

    OpenCV相机标定全过程findChessboardCorners()棋盘格角点检测boolfindChessboardCorners(InputArrayimage, SizepatternSize, OutputArraycorners, intflags=CALIB_CB_ADAPTIVE_THRESH+ …

    2022年5月8日
    54
  • PHP 的解压缩ZipArchive中的extractTo()方法 LINUX+nginx环境中解压zip时文件丢失的问题

    PHP 的解压缩ZipArchive中的extractTo()方法 LINUX+nginx环境中解压zip时文件丢失的问题

    2021年12月15日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号