#205-[STL set] 灰色头像

Description

引子:

这一些不要管,读了没有用的

背景:

WJMZBMR 喜欢上 QQ。。但是很多人的头像已经变成灰色了。这让他压力很大。而且 WJMZBMR 的好友太多了,大量的灰色头像让他无法准确的找到他想找的好友。。

今天 WJMZBMR 决定清理一下他的 QQ,找出那些不会在跳动的头像并且把它们踢掉。为此他翻出了最近一个月的聊天记录。

如果一个头像在在最近一个月中与 WJMZBMR 聊天次数小于等于 2 次, WJMZBMR 就会认为这是不会再跳动的灰色头像然后把他删掉。

那么请你为 WJMZBMR 写个程序完成这件事情,并输出剩下的头像。

 

定义:

头像其实就是 ID,是一个长度小于等于 30 的,由小写或者大写英文字母组成的字符串。

 

严格的数学定义:

给出一些字符串,输出其中出现次数大于等于 3 次的。
关于输出的顺序,出现次数多在前,如果次数一样多就按字典序,相同的 ID 只输出一次。

Input

第一行 N 表示聊天记录的长度。
接下来 N 行每行一个字符串表示与 WJMZBMR 聊天的 ID。

Output

第一行表示要输出的头像的个数 M。
之后M行每行一个字符串表示输出的 ID(请按给定顺序输出,两个相同的 ID 只输出一次)。

6 
Gx
tracyhenry
seventhplus
Gx
seventhplus
Gx
  • Sample Input

1
Gx
  • Sample Output

HINT

20%的数据 N<=1000
100%的数据 N<=100000

Uploaded By MCHacker

 

直接STLset爆枚......

注意最后的排序顺序.

#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;
const int MAXN = 100010;

multiset st;
priority_queue q;
string s[MAXN], r[MAXN];

bool comp(string a, string b) { // 最后的排序
	int aa = st.count(a), bb = st.count(b);
	if (aa!=bb) return aa>bb;
	return a> str;
		if (!st.count(str)) s[++id] = str;
		st.insert(str);
	}
	int res = 0;
	for (int i=1; i<=id; ++i) { // 枚举每个字符串
		if (st.count(s[i])>2) { // 大于等于3的,可以有
			r[++res] = s[i]; // 存入结果数组
		}
	}
	sort(r+1, r+res+1, comp); // 排序
	printf("%d", res);
	for (int i=1; i<=res; ++i) {
		printf("\n"); cout << r[i];
	}
	return 0;
}

 

你可能感兴趣的:(刷题)