re求助
  • 板块学术版
  • 楼主ZXXS
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/10/12 19:53
  • 上次更新2023/10/27 07:46:13
查看原帖
re求助
595999
ZXXS楼主2022/10/12 19:53
#include<bits/stdc++.h>
#define debug(x) cerr<<#x<<"="<<(x)<<endl;
using namespace std;
inline void write(int x)
{
    if(x<0)
    {
        putchar('-');
        x=-x;
    }
    if(x>9)
        write(x/10);
    putchar(x%10+'0');
}
inline int read()
{
    int x=0,f=1;
    char c=getchar();
    while(c<'0'||c>'9')
    {
        if(c=='-')
            f=-1;
        c=getchar();
    }
    while(c>='0'&&c<='9')
    {
        x=x*10+c-'0';
        c=getchar();
    }
    return x*f;
}
int s1[50],s2[50][50],s3[50][50][50];
string s[100005];
int main()
{
    //freopen(".in","r",stdin);
    //freopen(".out","w",stdout);
    ios::sync_with_stdio(false);
    int n=read();
    for(int i=1;i<=n;++i)
    {
        cin>>s[i];
        if(s[i].size()==1)
            ++s1[s[i][0]-'a'];
        else if(s[i].size()==2)
        {
            ++s2[s[i][0]-'a'][s[i][1]-'a'];
        }
        else
        {
            ++s3[s[i][0]-'a'][s[i][1]-'a'][s[i][2]-'a'];
        }
    }
    int maxsize=0;
    string maxx="";
    for(int i=0;i<=26;++i)
    {
        if(s1[i]>maxsize)
        {
            maxx=i+'a';
            maxsize=s1[i];
        }
    }
    for(int i=0;i<=26;++i)
    {
        for(int j=0;j<=26;++j)
        {
            if(s2[i][j]>maxsize)
            {
                maxx=i+'a';
                maxx+=j+'a';
                maxsize=s2[i][j];
            }
        }
    }
    for(int i=0;i<=26;++i)
    {
        for(int j=0;j<=26;++j)
        {
            for(int k=0;k<=26;++k)
            {
                if(s3[i][j][k]>maxsize)
                {
                    maxx=i+'a';
                    maxx+=j+'a';
                    maxx+=k+'a';
                    maxsize=s3[i][j][k];
                }
            }
        }
    }
    cout<<maxx<<endl;
    return 0;
}

题目

重名

题目背景

百度百科中对字典序的通俗解释如下——

设想一本英语字典里的单词,何者在前何者在后?

显然的做法是先按照第一个字母、以 a、b、c……z 的顺序排列;如果第一个字母一样,那么比较第二个、第三个乃至后面的字母。如果比到最后两个单词不一样长(比如,sigh 和 sight),那么把短者排在前。

题目描述

李华发现班级里有很多同学的首字母缩写相同,比如李华的首字母缩写和“刘瀚”,“林泓”的一样,都是lh。

他希望你帮他统计一下班级里出现次数最多的名字缩写。(若有多个名字缩写出现次数相同,输出其中字典序最小的一个。)

输入格式

输入第一行包括一个正整数n,表示班级人数。

输入第二行包括n个用空格隔开的字符串,每个字符串长度为2或3,Si表示第i个同学的名字缩写。

输出格式

输出一个长度为2~3的字符串,表示出现次数最多的名字缩写。(若有多个名字缩写出现次数相同,输出其中字典序最小的一个。)

样例 #1

样例输入 #1

4
lh lz lh lz

样例输出 #1

lh

提示

数据范围:

对于10%的数据,1≤n≤3

对于30%的数据,1≤n≤10

对于50%的数据,1≤n≤100

对于100%的数据,1≤n≤100000

保证输入字符串的长度为2~3,且仅由小写字母组成(26种小写字母均可能作为输入字符)。

2022/10/12 19:53
加载中...