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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • php用空格分隔字符串,分割字符串空格[通俗易懂]

    php用空格分隔字符串,分割字符串空格[通俗易懂]【java易错点】javasplit分割字符串空格问题解析Strings=”@123.com”;String[]data=s.split(“@”);//以@分割字符串,获得@后的值。运行结果如下data[0]:””;data[1]:123.com;此时,你会发现,data数组里面存储的第一个元素是一个空格…文章落雨_2012-02-14832浏览量python…

    2025年6月1日
    2
  • 双倍余额递减法计提折旧的计算公式_双倍余额递减法折旧的公式

    双倍余额递减法计提折旧的计算公式_双倍余额递减法折旧的公式双倍余额递减法:年折旧率=2/预计的折旧年限×100%月折旧率=年折旧率/12月折旧额=固定资产账面净值×月折旧率年数总和法:年折旧率=尚可使用年数/预计使用年限的年数总和月折旧率

    2022年8月3日
    6
  • TeX Live2018_latex安装教程

    TeX Live2018_latex安装教程Y·S2018年8月5日15:00:32点击链接https://tug.org/texlive/注:Latex不止TeX这一种,这里只给出了TeX的安装,如果想尝试别的软件的同学可以自行寻找其他教程。并执行如下操作:第一步第二步第三步第四步第五步装载下载好了的TexLive安装包:分以下几种情况:…

    2022年4月29日
    42
  • 60mph和kmh换算_mph和kmh换算(mph换算器)

    60mph和kmh换算_mph和kmh换算(mph换算器)mph是英里每时的意思吗?如何换算成千米每时?mph是米/小时的意思mitersperhour也可写成m/hAkm/h=A*1000m/hmph是英里每时的意思吗?如何换算成千米每时?MILESPERHOUR英里每小时英里的计速单位,1MPH=1.609KM/H玩极品飞车12,上面的速度是mph,怎么换算啊1英里=5280英尺=63360英寸=1…

    2022年6月28日
    67
  • <context-param>的contextConfigLocation以及DispatcherServlet的contextConfigLocation

    <context-param>的contextConfigLocation以及DispatcherServlet的contextConfigLocationcontextConfigLocation/WEB-INF/classes/applicationContext.xml,/WEB-INF/classes/module/*Context.xmlcontextConfigLocation/WEB-INF/spring/servlet-context.xml,/WEB-INF/classes

    2022年7月16日
    16
  • spss中聚类分析_spss modeler聚类分析

    spss中聚类分析_spss modeler聚类分析spss基本分析总结聚类分析和判断分析聚类分析Kmeans快速聚类分析HierarchicalCluster层次聚类分析Q型聚类R型聚类当观察值个数较多或文件非常大时,应使用快速聚类分析。层次聚类在大数据下图形过于分散,不易解释。连续变量的样本距离测量方法测量方法计算公式欧式距离Chebychev距离Block距离Minkowski距离…

    2022年10月17日
    2

发表回复

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

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