思路
这道题在L2里属于偏简单的一道,数据范围很友好,倾向于使用逻辑而非算法.但想要比较轻松的完成这道题目还是需要一些stl使用经验的.
对于一个用户,有几个需要记录的属性:
- 姓名,用于输出
- 总点赞数,用于确定输入标签的数量,以及确定输出顺序的次要因素
- 点赞的标签总数,确定输出顺序的主要因素
- 点赞过的标签数,用于去重.
实现过程
对于一个用户的属性,用一个结构体可以轻松容纳;
姓名和点赞数输入都会给出,存下来就行;
在输入用户点赞的标签时,边判重边累加其点赞过的标签总数即可.
判重我使用了set,根据其唯一性判断标签是否存在过,未存在过答案+1.将其标记为存在(插入set中).标签友好的数据范围也可以用bool数组来判断,记得每次重新声明或者memset就行.
在全部输入和计算完成后,用sort加上自己写的cmp函数排序即可.
排序优先按照点赞标签数从高到低,同标签数按点赞次数从小到大排序就行(题目那描述我有点没看懂…),顺序别反了.
输出前还要判断下n是否小于三个,如果小于空位要补上-.还要注意行尾不能有多余空格的输出格式.
代码实现
#include <bits/stdc++.h>
using namespace std;
const int N = 105;
struct Node//存用户的结构体
{
string name;//用户名
int num;//用户点赞总数
set<int> tag;