来源于陈C同学(CC)
来源于陈C同学(CC)
来源于陈C同学(CC)
12 设计推特
作者: Turbo时间限制: 1S章节: 课程设计
问题描述 :
设计一个简化版的推特(Twitter),可以让用户实现发送推文,关注/取消关注其他用户,能够看见关注人(包括自己)的最近 10 条推文。
实现 Twitter 类:
Twitter() :初始化简易版推特对象
void postTweet(int userId, int tweetId) :根据给定的 tweetId 和 userId 创建一条新推文。每次调用此函数都会使用一个不同的 tweetId 。
vector
void follow(int followerId, int followeeId): ID 为 followerId 的用户开始关注 ID 为 followeeId 的用户。
void unfollow(int followerId, int followeeId): ID 为 followerId 的用户不再关注 ID 为 followeeId 的用户。
示例:
输入
postTweet 1 5
getNewsFeed 1
follow 1 2
postTweet 2 6
getNewsFeed 1
unfollow 1 2
getNewsFeed 1
输出
5
6 5
5
解释
twitter.postTweet(1, 5); // 用户 1 发送了一条新推文 (用户 id = 1, 推文 id = 5)
twitter.getNewsFeed(1); // 用户 1 的获取推文应当返回一个列表,其中包含一个 id 为 5 的推文
twitter.follow(1, 2); // 用户 1 关注了用户 2
twitter.postTweet(2, 6); // 用户 2 发送了一个新推文 (推文 id = 6)
twitter.getNewsFeed(1); // 用户 1 的获取推文应当返回一个列表,其中包含两个推文,id 分别为 -> [6, 5] 。推文 id 6 应当在推文 id 5 之前,因为它是在 5 之后发送的
twitter.unfollow(1, 2); // 用户 1 取消关注了用户 2
twitter.getNewsFeed(1); // 用户 1 获取推文应当返回一个列表,其中包含一个 id 为 5 的推文。因为用户 1 已经不再关注用户 2
输入说明 :
输入若干行
每行输入为postTweet、getNewsFeed、follow或者unfollow:
如果指令为postTweet类型,后面需要输入两个整数表示tweetId 和 userId
如果指令为getNewsFeed类型,后面需要输入一个整数表示userId
如果指令为follow类型,后面需要输入两个整数followerId和followeeId
如果指令为unfollow类型,后面需要输入两个整数followerId和followeeId
提示:
1 <= userId, followerId, followeeId <= 500
0 <= tweetId <= 10^4
所有推特的 ID 都互不相同
postTweet、getNewsFeed、follow 和 unfollow 方法最多调用 3 * 10^4 次
输出说明 :
输出若干行:
每行为若干整数,为getNewsFeed指令的返回值,每个整数后跟一个空格。
postTweet 1 1
getNewsFeed 1
follow 1 2
getNewsFeed 1
unfollow 1 2
postTweet 2 3
getNewsFeed 2
---------
1
1
3
- #include
- using namespace std;
-
-
- typedef typename std::pair<int,int> MyPair;//first为时间,second为文章
-
- class Twitter
- {
- std::unordered_map<int ,vector
> UTNews; - std::unordered_map<int ,set<int>>UTUsers;
- int TimePriority;
- public:
- Twitter():TimePriority(0){}
- void postTweet(int userId, int tweetId);
- vector<int> getNewsFeed(int userId);
- void follow(int followerId, int followeeId);
- void unfollow(int followerId, int followeeId);
-
- };
- void Twitter::postTweet(int userId, int tweetId)
- {
- UTNews[userId].push_back(make_pair(++TimePriority, tweetId));
- }
-
- vector<int> Twitter::getNewsFeed(int userId)
- {
- vector
tmp(0) ; - set<int> Followees=UTUsers[userId];
- set<int>::iterator i=Followees.begin(),SetEnd=Followees.end();
-
- for(i=Followees.begin();i!=SetEnd;i++)
- {
- if(UTNews.find(*i)!=UTNews.end())
- {
- tmp.insert(tmp.end(),UTNews[*i].begin(),UTNews[*i].end());
- }
- }
- tmp.insert(tmp.end(),UTNews[userId].begin(),UTNews[userId].end());
- sort(tmp.begin(),tmp.end(),greater
()); - vector<int> result(0);
- int size=tmp.size()<10?tmp.size():10,j;
- for(j=0; j
- {
- result.push_back(tmp[j].second);
- }
- return result;
- }
-
-
-
- void Twitter::follow(int followerId, int followeeId)
- {
- UTUsers[followerId].insert(followeeId);
- }
-
- void Twitter::unfollow(int followerId, int followeeId)
- {
- auto i=UTUsers[followerId].find(followeeId);
- UTUsers[followerId].erase(i);
- }
-
- int main()
- {
- string str;
- int userid,tweetid,followerid,followeeid,i;
- Twitter CcTwitter;
- vector<int> tmp;
- while(cin>>str)
- {
- if(str=="postTweet")
- {
- cin>>userid>>tweetid;
- CcTwitter.postTweet(userid, tweetid);
- }
- else if(str=="getNewsFeed")
- {
- cin>>userid;
- tmp=CcTwitter.getNewsFeed(userid);
- for(i=0;i
size();i++) - {
-
- cout<
" "; - }
- cout<
- }
- else if(str=="follow")
- {
- cin>>followerid>>followeeid;
- CcTwitter.follow(followerid,followeeid);
- }
- else
- {
- cin>>followerid>>followeeid;
- CcTwitter.unfollow(followerid,followeeid);
- }
-
- }
- return 0;
- }
-
相关阅读:
6. `Java` 并发基础之`ReentrantReadLock`
C/S架构学习之使用poll实现TCP中型并发服务器
【jquery Ajax 】form表单教学+评论案例
串口通信(11)-CRC校验介绍&算法
[数据集][目标检测]盲道检测数据集VOC+YOLO格式2173张1类别
用Java语言创建的Spring Boot项目中,如何传递数组呢??
基于nodejs面向图书共享系统
Python批量修改图片size
流畅的Python——序幕
交换机配置参考案例
-
原文地址:https://blog.csdn.net/Ultravioletrays/article/details/126799849