码迷,mamicode.com
首页 > 其他好文 > 详细

检索关键字 nyoj

时间:2018-05-17 23:25:13      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:option   字母   个数   submit   problem   描述   type   ++   有关   

检索关键字

时间限制: 1000ms
内存限制: 65536KB
64位整型:      Java 类名:
类型: 
没有
 
 

题目描述

有一些关键字,现在给你一个字符串,请你根据此字符串,将关键字根据相关关系排列方便检索。1
字符串长度相同的关键字才有关系,两个字符串在相同位置的相同字符越多则关系越密切,若一样多则字典序越小越密切。

 

输入

多行(少于101),每行一个字符串(只含小写字母,长度不超过1000),连续多行的字符个数相同,视为一组输出,每组的最后一个字符为给你的字符串。
 

 

输出

每组数据按照相关关系密切程度排序

 

样例输入

aaa
bab
aba
acdes
abcde
aaaaa

样例输出

aaa
bab
abcde
acdes

题意:输入未知数量的的字符串,1>相同长度的视为一组    2>最后一组为比较样例   3>其他的与此比较,按相同位置的相同字符数量从大到小、若相同数量的话,则按字典序顺序输出
解决方案:字符串处理,输入时字符串长度相同的为一组,可以先把所有的数据读完再分组处理也可以读一组处理一组。也可一个一个字符串地输入,再进行比较

#include <iostream>
#include <algorithm>
using namespace std;

typedef struct node
{
string s;
int count;
}N;
N n[110];

bool cmp(const N &t1,const N &t2)
{
if(t1.count==t2.count)
return t1.s<t2.s;
return t1.count>t2.count;
}

int main()
{
int num=0;
string s1;
cin>>s1;
n[0].s=s1;
int len=s1.size();
while(cin>>s1)
{
if(len==s1.size())
n[++num].s=s1;
else
{
if(num!=0)
{
for(int i=0;i<num;++i)
{
n[i].count=0;
for(int j=0;j<n[0].s.size();++j)
if(n[i].s[j]==n[num].s[j])
n[i].count++;
}

sort(n,n+num,cmp);
for(int i=0;i<num;++i)
cout<<n[i].s<<endl;
}
num=0;
len=s1.size();
n[0].s=s1;
}
}

if(num!=0)
{
for(int i=0;i<num;++i)
{
n[i].count=0;
for(int j=0;j<n[0].s.size();++j)
if(n[i].s[j]==n[num].s[j])
n[i].count++;
}

sort(n,n+num,cmp);
for(int i=0;i<num;++i)
cout<<n[i].s<<endl;
}
return 0;
}

检索关键字 nyoj

标签:option   字母   个数   submit   problem   描述   type   ++   有关   

原文地址:https://www.cnblogs.com/tianzeng/p/9053655.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!