链接:https://www.nowcoder.com/acm/contest/115/E
来源:牛客网

题目描述

当你的好友给你发来一条消息,你的消息列表上就会置顶显示该好友的名字以及该好友发给你的消息总数,换句话说,你的消息列表里的好友是按跟你发消息的时间进行排序的,给你发消息的时间离当前时间越近的好友将排到越前面。当然,你可能会手动置顶一些好友,那么其他的好友给你发消息时,他们的名字就只能在你手动置顶好友的后面再置顶了。如果消息被你查看或者忽略,又或者你把好友消息删除了,消息总数将重置为0。

根据用户的需求,有以下几个功能,需要你来实现:
(1)recv:收到一条好友消息,对于手动置顶好友的消息,将在“手动置顶好友列表”里置顶;对于其他好友的消息,将在“手动置顶好友列表”之下的消息列表里置顶,同时都需要显示该好友的消息总数。
(2)view:查看好友消息,将使该好友消息数变为0。
(3)up:手动置顶好友。
(4)down:取消手动置顶。
(5)delete:删除好友消息,这个操作将使该好友从消息列表中删除,同时取消对该好友的手动置顶(如果存在的话)。

假设初始消息列表为空,经过了一系列好友消息的操作之后,最终的消息列表将是怎么样的呢?

输入描述:

  1. 第一行输入一个整数T(表示样例个数)
    接下来T组样例。
    每组样例
    第一行输入一个整数M,表示操作数(1M1000000);
    接下来M行,
    每行输入一个操作,由一个操作类型和一个好友id构成,之间以空格分开,操作类型如上面5个英文单词表示,
    例如:“recv 123456”表示接收到id123456的好友的一条消息,“delete 123456”表示在消息列表中删除 id 123456的好友的消息记录。
    为了简化问题,一开始消息列表为空并假设好友名字id由六位数字“唯一”标识(000000id999999),
    题目保证输入数据的一致性。

输出描述:

  1. 每组样例,
    输出最后的消息列表,自顶向下,每行输出一个:“好友id 消息数”。
    每组样例后空一行。

输入例子:
  1. 1
  2. 13
  3. recv 000001
  4. recv 000002
  5. up 000002
  6. view 000001
  7. recv 000002
  8. recv 000004
  9. up 000004
  10. up 000001
  11. recv 000004
  12. recv 000003
  13. view 000001
  14. view 000004
  15. down 000002
输出例子:
  1. 000004 0
  2. 000001 0
  3. 000003 1
  4. 000002 2

-->

示例1

输入

  1. 1
  2. 13
  3. recv 000001
  4. recv 000002
  5. up 000002
  6. view 000001
  7. recv 000002
  8. recv 000004
  9. up 000004
  10. up 000001
  11. recv 000004
  12. recv 000003
  13. view 000001
  14. view 000004
  15. down 000002

输出

  1. 000004 0
  2. 000001 0
  3. 000003 1
  4. 000002 2
    其实很简单的结构体排序,不过直接给别人的代码吧
  1. #include <iostream>
  2. #include <string.h>
  3. #include<bits/stdc++.h>
  4. using namespace std;
  5.  
  6. struct friends{
  7. int id;
  8. int mes;
  9. int pri;
  10. bool is;
  11. }f[];
  12.  
  13. bool cmp(friends a,friends b){
  14. if(a.is!=b.is){
  15. return a.is>b.is;
  16. }
  17. else
  18. {
  19. return a.pri>b.pri;
  20. }
  21. }
  22.  
  23. char str[];
  24. int main(){
  25.  
  26. int T;
  27. scanf("%d",&T);
  28. while(T--){
  29. int now=;
  30. int id;
  31. int M;
  32. scanf("%d",&M);
  33. memset(f,,sizeof(f));
  34. while(M--){
  35. scanf("%s%d",str,&id);
  36. //cout<<id<<endl;
  37. f[id].id=id;
  38. if(str[]=='r'){
  39. f[id].mes++;
  40. f[id].pri=now++;
  41. }
  42. if(str[]=='u'){
  43. f[id].is=;
  44.  
  45. }
  46. if(str[]=='o'){
  47. f[id].is=;
  48. }
  49. if(str[]=='v'){
  50. f[id].mes=;
  51. }
  52. if(str[]=='l'){
  53. f[id].mes=;
  54. f[id].pri=;
  55. f[id].is=;
  56. }
  57.  
  58. }
  59. sort(f,f+,cmp);
  60.  
  61. for(int i=;i<;i++){
  62. if(f[i].pri!=){
  63. printf("%06d %d\n",f[i].id,f[i].mes);
  64. }
  65. }
  66. puts("");
  67.  
  68. }
  69.  
  70. return ;
  71. }

江西财经大学第一届程序设计竞赛 E的更多相关文章

  1. 江西财经大学第一届程序设计竞赛 G题 小Q的口袋校园

    链接:https://www.nowcoder.com/acm/contest/115/G来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  2. 江西财经大学第一届程序设计竞赛 H题 求大数的阶乘

    链接:https://www.nowcoder.com/acm/contest/115/H 来源:牛客网 晚上,小P喜欢在寝室里一个个静静的学习或者思考,享受自由自在的单身生活. 他总是能从所学的知识 ...

  3. 江西财经大学第一届程序设计竞赛 H

    链接:https://www.nowcoder.com/acm/contest/115/H来源:牛客网 题目描述 晚上,小P喜欢在寝室里一个个静静的学习或者思考,享受自由自在的单身生活. 他总是能从所 ...

  4. 江西财经大学第一届程序设计竞赛 G

    链接:https://www.nowcoder.com/acm/contest/115/G来源:牛客网 题目描述 周末,小Q喜欢在PU口袋校园上参加各种活动刷绩点,体验丰富多彩的大学生活. 但是每个活 ...

  5. 江西财经大学第一届程序设计竞赛 F题 解方程

    链接:https://www.nowcoder.com/acm/contest/115/F来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  6. 江西财经大学第一届程序设计竞赛 I

    链接:https://www.nowcoder.com/acm/contest/115/I来源:牛客网 题目描述 小P和小Q是好朋友,今天他们一起玩一个有趣的游戏. 他们的初始积分都为1,赢的人可以将 ...

  7. 江西财经大学第一届程序设计竞赛 F

    链接:https://www.nowcoder.com/acm/contest/115/F来源:牛客网 题目描述 对于方程 2018 * x ^ 4 + 21 * x + 5 * x ^ 3 + 5 ...

  8. 江西财经大学第一届程序设计竞赛 D

    链接:https://www.nowcoder.com/acm/contest/115/D来源:牛客网 题目描述 事情,是这样的. 有这么一天双休日的中午. 我刚把我衣服扔进了洗衣机,然后拿了个小板凳 ...

  9. 江西财经大学第一届程序设计竞赛 C

    链接:https://www.nowcoder.com/acm/contest/115/C来源:牛客网 题目描述 决赛圈还剩下两个人,“伏地魔”XDD和跑毒进圈的FZL,XDD拿着狙击枪AWM瞄准并准 ...

随机推荐

  1. linux设置自动获取IP地址

    右键单击,选择设置 勾选桥接模式

  2. maven安装第三方jar包到本地仓库

    添加项目依赖的时候,有些jar下载不下来,只有手动下载或安装到本地仓库了 首先下载所需要的jar,放到指定的文件夹 然后执行如下命令: mvn install:install-file -Dfile= ...

  3. go install 命令

    go install 命令简介 用于编译并安装代码包或源代码文件 安装代码包会在当前工作区的 'pkg/<平台相关目录>'下生成'归档文件' 安装命令源码文件会在当前工作区的'bin'目录 ...

  4. ECMAScript 定义类、对象

    使用预定义对象只是面向对象语言的能力的一部分,它真正强大之处在于能够创建自己专用的类和对象. ECMAScript 拥有很多创建对象或类的方法. 工厂方式 原始的方式 因为对象的属性可以在对象创建后动 ...

  5. 用StringBuilder来实现经典的反转问题

    import java.util.Scanner; public class Practise03 { public static void main(String[] args) { //键盘录入一 ...

  6. Opencv读取图片像素值并保存为txt文件

    #include <opencv2/opencv.hpp>#include<vector>#include <fstream> using namespace st ...

  7. boost::fucntion 用法详解

    转载自:http://blog.csdn.net/benny5609/article/details/2324474 要开始使用 Boost.Function, 就要包含头文件 "boost ...

  8. 服务机器人的小脑——SLAM技术

    博客转载自:https://www.leiphone.com/news/201706/DZlMscTwdIzFyodg.html 雷锋网(公众号:雷锋网)按:本文作者SLAMTEC(思岚科技公号sla ...

  9. General框架如何实现多数据库支持

    关于用C#实现多数据库支持的方式,大家都会多少了解,本文从General框架的开发思路角度详细介绍General框架实现多数据库支持的方式,使更多的人了解General框架的底层实现并得到所需的相关知 ...

  10. c语言实战: 计算时间差

    计算时间差有两种,一种是把时间都转化为分钟数,一种是把时间都转化为小时,后者是会用到除法所以不可避免产生浮点数,所以我们选择转化为分钟数来计算. //题目:给定两个时间点计算它们的时间差,比如,1:5 ...