欢迎来到Nepire的校OJ入门题解——————蓝桥选拔篇(伪最终回)
这次我主要是讲解第八届蓝桥杯全国软件和信息技术专业人才大赛校内选拔赛的七道题目,中间可能会扯到一些其他东西,然后就开始我们的入门题解吧呜喵
Problem G:字符串统计(时间限制:3秒)
Description
输入若干行字符串,输出出现次数最多的一条字符串。
Input
输入数据的第一行有一个整数N,表示有N行字符串(1 < N < 10^6)。
接下来有N行字符串,字符串只包含小写字母,长度不大于 100 , 不重复的字符串数目不超过 1000 。Output
输出出现次数最多的一条字符串,数据保证结果唯一。
Sample Input
3
asdfghjkl
asdfghjkl
fefeffSample Output
asdfghjkl
Source
解题思路
这题emmmmmmm,map没过去你们就参考@大风烈酒自在孤独 dalao的代码理解下,等我哪天进3s了再改这篇
参考代码
#include <ctype.h>
#include <errno.h>
#include <float.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <wchar.h>
#include <wctype.h>
#include <assert.h>
#include <limits.h>
#include <locale.h>
#include <math.h>
#include <stdio.h>
typedef struct node
{
int cnt;
int num;
struct node* next[26];
}node;
void insert_tree(char* str , node* root , int* max , char* max_str)
{
node* p = root;
int i = 0;
int l = strlen(str);
for ( i = 0 ; i < l ; i++)
{
if (p->next[str[i] - 'a'] == NULL)
{
p->next[str[i] - 'a'] = (node*)malloc(sizeof(node));
p->next[str[i] - 'a']->cnt = 0;
p->next[str[i] - 'a']->num = 0;
memset(p->next[str[i] - 'a']->next,0,sizeof(p->next[str[i] - 'a']->next));
}
p = p->next[str[i] - 'a'];
p->cnt += 1;
}
p->num++;
if (p->num > *max)
{
*max = p->num;
strcpy(max_str,str);
}
}
int main(void)
{
node* root = (node*)malloc(sizeof(node));
root->cnt = 0;
root->num = 0;
memset(root->next,0,sizeof(root->next));
int N;
scanf("%d",&N);
char str[101];
int max = 0;
char max_str[101];
while(N--)
{
scanf("%s",str);
insert_tree(str,root,&max,max_str);
}
printf("%s",max_str);
return 0;
}