2. SLF 的消息记录 (records.c/cpp/pas) 【题目描述】 或许是人气过于旺盛,SLF 的手机一只叮叮叮响个不停。不用说,一定是女孩子发来的 短信。有一天,一直对此毫不在意的 SLF 男神来了兴趣,他想知道给他发消息最多的女孩是 哪一位。女孩的名字均由三个单词组成,由于女孩非常狡猾,她们有的时候会把自己的名字 三个单词进行交换,所以名字的先后顺序不同也被视为是同一个女孩。 给出 n 条消息记录,每条记录包含三个单词,表示一个人,判定两条消息是否一样即 判定三个单词交换顺序后(也可以不交换)是否完全相同,问出现次数最多的消息的出现 的次数。
【输入格式】 第一行一个数 n。 接下来 n 行每行一条消息,三个用空格隔开的字符串,每个字符串只包含大写字母, 且长度大于 0 小于等于 10。
输出格式】 一行一个数,表示发信息最多的女孩发消息的次数。
【输入样例】 5 BESSIE ELSIE MATILDA FRAN BESSIE INGRID BESSIE ELSIE MATILDA MATILDA INGRID FRAN ELSIE BESSIE MATILDA
【输出样例】 3
【样例解释】 {BESSIE, ELSIE, MATILDA}
【数据规模】 对于 30%的数据,1 ≤ n ≤ 50 对于 50%的数据,1 ≤ n ≤ 250 对于 100%的数据,1 ≤ n ≤ 1000
#include <fstream>
#include <algorithm>
using namespace std;
int n;
string groups[1001];
int main()
{ ifstream fin("records.in");
fin >> n;
for (int i=0; i<n; i++)
{
string str[3];
fin >> str[0] >> str[1] >> str[2];
sort(str,str+3); // sort each group
groups[i]=str[0]+" "+str[1]+" "+str[2]; // and convert it to a string
}
fin.close();
sort(groups,groups+n); // sort the entire list
int best=0;
for (int i=0,j=1; i<n; i++,j++)
// continue counting until the next string is different
if (groups[i]!=groups[i+1])
{
if (best<j) best=j; // update the best count
j=0;
}
ofstream fout("records.out");
fout << best << "\n";
fout.close();
}