题目描述

美团的办公室一共有n层,每层有m个会议室,可以看成是一个n*m的网格图。工程师们每天的工作需要协作的地方很多,经常要到会议室开会解决各种问题。公司是提倡勤俭节约的,因此每次会议室只在使用时才开灯。
当一个工程师进入会议室时,假设没有其他人,他会把灯打开。
当一个工程师离开会议室时,假设没有其他人,他会把灯关掉。
现在给出一系列工程师进出会议室的记录,请问在此过程中,最多有多少会议室的灯是亮着的?请输出亮灯数最多时,每个会议室的明暗状态。

输入描述:

  1. 第一行三个整数nmk,分别表示总行数、总列数、工程师的进出记录数。
  2. 接下来k行,每行三个整数和一个字符串x, y, z, t,表示t时间点有一条记录,z=0表示xy列的会议室有个工程师进入会议室了,z=1表示xy列的房间有个工程师离开会议室了。
  3. 假设一开始所有会议室里都是没人的。
  4. 1 <= n, m <= 500
  5. 1 <= k <= 100,000
  6. tHH:MM:SS.SSS的形式,其中HH表示小时,MM表示分钟,SS.SSS表示秒数。(因为工程师有非常强大的时间观念,所以对于他们来说,时间是精确到0.001秒的)
  7. 数据保证t18:00:00.00023:59:59.999之间,且没有两条记录的时间是完全一样的。数据保证记录以t升序的形式给出。
  8. 1 <= x <= n
  9. 1 <= y <= m
  10. z∈{0, 1}
  11. 数据保证没有从空会议室离开的情况。
  12. 数据保证所有的时间格式合法。HHMM均为长度为2的字符串,SS.SSS为长度为6的字符串。

输出描述:

  1. 输出n行每行m个整数,第i行第j列表示在亮灯数最多的时刻,第i行第j列的会议室的亮灯情况,1表示亮着,0表示没亮。
  2. 如果存在多次亮灯数最多的时刻,输出最后一次时的情况。
示例1

输入

  1. 2 2 4
  2. 1 1 0 18:00:00.000
  3. 1 1 1 20:00:00.000
  4. 1 1 0 18:00:01.000
  5. 1 2 0 18:00:02.000

输出

  1. 11
  2. 00

参考代码:

#include<iostream>
#include<stdio.h>
#include<queue>
#include<stack>
#include<string.h>
#include<cmath>
#include<algorithm>
#include<math.h>
using namespace std;
struct t
{
    t(){}
    t(int a,int b,int c,int d)
    {
        h=a;m=b;s=c;ms=d;
    }
    int h;//小时
    int m;//分钟
    int s;//秒
    int ms;//毫秒
    int x;//行数
    int y;//列数
    int z;//表示进入还是离开
    bool operator<(struct t&t2)
    {
        if(h!=t2.h)return h<t2.h;
        else
        {
            if(m!=t2.m)return m<t2.m;
            else
            {
                if(s!=t2.s)return s<t2.s;
                else
                {
                    return ms<t2.ms;
                }
            }
        }
    }
}a[100010];
int room[510][510];//动态记录每个会议室工程师的数目
int state[510][510];//保存亮的会议室数目最大时的状态
int main()
{
    //freopen("in.txt","r",stdin);
    int n,m;int k;
    scanf("%d%d%d",&n,&m,&k);
    int ma=0;//即max,保存亮着的会议室的数目最大值
    char buf[20];
    for(int i=0;i<k;i++)
    {
        scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
        cin>>buf;
        a[i].h=(buf[0]-'0')*10+(buf[1]-'0');
        a[i].m=(buf[3]-'0')*10+(buf[4]-'0');
        a[i].s=(buf[6]-'0')*10+(buf[7]-'0');
        a[i].ms=(buf[9]-'0')*100+(buf[10]-'0')*10+(buf[11]-'0');
    }
    sort(a,a+k);
    int cnt=0;
    for(int i=0;i<k;i++)
    {
        if(a[i].z==0&&room[a[i].x][a[i].y]==0)
        {
            cnt++;//进入没人的会议室,当前人数加1
        }
        if(a[i].z==1&&room[a[i].x][a[i].y]==1)
        {
            cnt--;//离开只有自己的会议室,人数减1
        }
        if(a[i].z)room[a[i].x][a[i].y]--;//只要有人出去,对应会议室人数就减1
        else room[a[i].x][a[i].y]++;//只要有人进来,对应会议室人数就加1
        if(cnt>=ma)
        {
            memcpy(state,room,sizeof(room));//更新会议室状态
            ma=cnt;//更新最大值
        }
    }

    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(state[i][j])cout<<1;
            else cout<<0;
        }
        cout<<endl;
    }
    return 0;
}

2018美团CodeM编程大赛初赛B轮 A题开关灯的更多相关文章

  1. CodeM美团点评编程大赛初赛A轮

    因为语文太差弃赛,第一个追及问题看不懂我就弃赛了.打进复赛确实挺难的,补一下题,锻炼下就行了. 身体训练 时间限制:1秒 空间限制:32768K 美团外卖的配送员用变速跑的方式进行身体训练.他们训练的 ...

  2. codeM美团编程大赛初赛B轮D题

    [编程题] 模 时间限制:1秒空间限制:32768K 给定四个正整数a,b,c,k,回答是否存在一个正整数n,使得a*n在k进制表示下的各位的数值之和模b为c.输入描述:第一行一个整数T(T < ...

  3. CodeM美团点评编程大赛初赛B轮 黑白树【DFS深搜+暴力】

    [编程题] 黑白树 时间限制:1秒 空间限制:32768K 一棵n个点的有根树,1号点为根,相邻的两个节点之间的距离为1.树上每个节点i对应一个值k[i].每个点都有一个颜色,初始的时候所有点都是白色 ...

  4. codeM美团编程大赛初赛B轮D题(考验你的数学思维!)

    [编程题] 模 时间限制:1秒空间限制:32768K 给定四个正整数a,b,c,k,回答是否存在一个正整数n,使得a*n在k进制表示下的各位的数值之和模b为c.输入描述:第一行一个整数T(T < ...

  5. codeM美团编程大赛初赛B轮E题

    题目描述 给出一个正整数n,我们把1..n在k进制下的表示连起来记为s(n,k),例如s(16,16)=123456789ABCDEF10, s(5,2)=11011100101.现在对于给定的n和字 ...

  6. 美团2018年CodeM大赛-初赛B轮 C题低位值

    试题链接:https://www.nowcoder.com/acm/contest/151/C 定义lowbit(x) =x&(-x),即2^(p-1) (其中p为x的二进制表示中,从右向左数 ...

  7. 美团2018年CodeM大赛-初赛B轮 B 配送(最短路)

    美团2018年CodeM大赛-初赛B轮 B 配送 题意 题解 对于每个任务,只要从上个任务的终点出发即可. 时间.地点很少,可以算出每个地点-时间的最小花费. 以题目描述的起点终点起始结束时间建图,很 ...

  8. 【结果发布】第六届SeedCoder编程大赛初赛结果发布

    微软俱乐部科技文化月seedcoder2014编程大赛已经初审完成. 评审小组选出最棒的作品进入决赛(现场答辩+陈述环节,由评委现场打分).终于排名由"初赛分数+现场答辩分"决定. ...

  9. 美团2017年CodeM大赛-初赛B轮-黑白树

    https://ac.nowcoder.com/acm/problem/13249 链接:https://ac.nowcoder.com/acm/problem/13249来源:牛客网 题目描述 一棵 ...

随机推荐

  1. pom.xml标签页名称

    pom.xml文件双击打开后,标签页显示的名称与<artifactId></artifactId>的内容相一致.

  2. H.Holy Grail ( floyd )(The Preliminary Contest for ICPC Asia Nanjing 2019)

    题意: 给出一个有向图,再给出6条原来不存在的路径,让你在这6条路径上添加一个最小的数,使图不存在负环. 思路: 直接6遍 floyd 输出就行了. #include <bits/stdc++. ...

  3. python __dict__ 跟 dir()的区别

    __dict__:要是对象的话返回的是一个对象自身的实例属性.不包括类的属性:要是类的__dict__则不包括父类的属性,只包含自身类属性[方法.类变量],不包括实例属性.正是这样.每个实例的实例属性 ...

  4. Codeforces 1221B. Knights

    传送门 看到棋盘上跳马,发现如果把棋盘黑白染色,那么每次移动都是从白点到黑点,从黑点到白点 所以直接根据黑白染色判断每个位置的马的颜色即可 #include<iostream> #incl ...

  5. Mac下的Web性能压力测试工具:ab(ApacheBench)

    Web开发,少不了的就是压力测试,它是评估一个产品是否合格上线的基本标准. ab是一种用于测试Apache超文本传输协议(HTTP)服务器的工具.apache自带ab工具,可以测试Apache.IIS ...

  6. 常见Http访问错误小结

    4xx 客户端错误# 400 bad request 错误的请求 # 401 未携带身份信息 # 403 forbidden 权限不够 # 404 Not Found# 405 请求方式不允许 5xx ...

  7. 响应式网页,让div的高和宽保持等比例放大、缩小

    1,方案一:响应式来做,可以根据媒体查询,设定在不同屏幕宽度下div的高度和宽度,具体的设置看你响应式想怎么显示 @media only screen and (min-width: 100px) a ...

  8. Ubuntu18.10中pip install mysqlclient 出现EnvironmentError: mysql_config not found错误

    Complete output from command python setup.py egg_info: sh: 1: mysql_config: not found Traceback (mos ...

  9. 【异常】~/.bash_profile:source:44: no such file or directory: /usr/local/Cellar/nvm/0.34.0/nvm.sh

    1 异常信息 /Users/zhangjin/.bash_profile:source:: no such file or directory: /usr/local/Cellar/nvm//nvm. ...

  10. 第十篇.2、python并发编程之多进程

    一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程.P ...