• 12 设计推特----来源于陈C同学(CC)


    来源于陈C同学(CC)

    来源于陈C同学(CC)

    来源于陈C同学(CC)

    12 设计推特

    作者: Turbo时间限制: 1S章节: 课程设计

    问题描述 :

    设计一个简化版的推特(Twitter),可以让用户实现发送推文,关注/取消关注其他用户,能够看见关注人(包括自己)的最近 10 条推文。

    实现 Twitter 类:

        Twitter() :初始化简易版推特对象

        void postTweet(int userId, int tweetId) :根据给定的 tweetId 和 userId 创建一条新推文。每次调用此函数都会使用一个不同的 tweetId 。

        vector getNewsFeed(int userId) :检索当前用户新闻推送中最近  10 条推文的 ID 。新闻推送中的每一项都必须是由用户关注的人或者是用户自己发布的推文。推文必须 按照时间顺序由最近到最远排序 。

        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. #include
    2. using namespace std;
    3. typedef typename std::pair<int,int> MyPair;//first为时间,second为文章
    4. class Twitter
    5. {
    6. std::unordered_map<int ,vector> UTNews;
    7. std::unordered_map<int ,set<int>>UTUsers;
    8. int TimePriority;
    9. public:
    10. Twitter():TimePriority(0){}
    11. void postTweet(int userId, int tweetId);
    12. vector<int> getNewsFeed(int userId);
    13. void follow(int followerId, int followeeId);
    14. void unfollow(int followerId, int followeeId);
    15. };
    16. void Twitter::postTweet(int userId, int tweetId)
    17. {
    18. UTNews[userId].push_back(make_pair(++TimePriority, tweetId));
    19. }
    20. vector<int> Twitter::getNewsFeed(int userId)
    21. {
    22. vector tmp(0);
    23. set<int> Followees=UTUsers[userId];
    24. set<int>::iterator i=Followees.begin(),SetEnd=Followees.end();
    25. for(i=Followees.begin();i!=SetEnd;i++)
    26. {
    27. if(UTNews.find(*i)!=UTNews.end())
    28. {
    29. tmp.insert(tmp.end(),UTNews[*i].begin(),UTNews[*i].end());
    30. }
    31. }
    32. tmp.insert(tmp.end(),UTNews[userId].begin(),UTNews[userId].end());
    33. sort(tmp.begin(),tmp.end(),greater());
    34. vector<int> result(0);
    35. int size=tmp.size()<10?tmp.size():10,j;
    36. for(j=0; j
    37. {
    38. result.push_back(tmp[j].second);
    39. }
    40. return result;
    41. }
    42. void Twitter::follow(int followerId, int followeeId)
    43. {
    44. UTUsers[followerId].insert(followeeId);
    45. }
    46. void Twitter::unfollow(int followerId, int followeeId)
    47. {
    48. auto i=UTUsers[followerId].find(followeeId);
    49. UTUsers[followerId].erase(i);
    50. }
    51. int main()
    52. {
    53. string str;
    54. int userid,tweetid,followerid,followeeid,i;
    55. Twitter CcTwitter;
    56. vector<int> tmp;
    57. while(cin>>str)
    58. {
    59. if(str=="postTweet")
    60. {
    61. cin>>userid>>tweetid;
    62. CcTwitter.postTweet(userid, tweetid);
    63. }
    64. else if(str=="getNewsFeed")
    65. {
    66. cin>>userid;
    67. tmp=CcTwitter.getNewsFeed(userid);
    68. for(i=0;isize();i++)
    69. {
    70. cout<" ";
    71. }
    72. cout<
    73. }
    74. else if(str=="follow")
    75. {
    76. cin>>followerid>>followeeid;
    77. CcTwitter.follow(followerid,followeeid);
    78. }
    79. else
    80. {
    81. cin>>followerid>>followeeid;
    82. CcTwitter.unfollow(followerid,followeeid);
    83. }
    84. }
    85. return 0;
    86. }


     

     

  • 相关阅读:
    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