• 牛客小白月赛11 C Rinne Loves Study


    链接:https://ac.nowcoder.com/acm/contest/370/C
    来源:牛客网

    题目描述

    Rinne 喜欢使用一种奇怪的方法背单词,现在这些单词被放在了一个 n×mn×m 的格子里。由于背单词是一个令人烦躁的事情,所以她决定每天只背同一行或者同一列的单词。她一共会背 T 次单词,为了方便巩固,她现在想知道:对于每个单词,最后一次背是什么时候呢?
    她这么可爱当然会算啦!但是她想考考你。

    输入描述:

    第一行三个整数 n,m,T。
    接下来 T 行,第 i+1 行描述第 i 天干了什么,每行的格式如下:
    `1 x`:说明她在这一天背了第 x 行的单词;
    `2 y`说明她在这一天背了第 y 列的单词。
    输入的所有量的具体意义请参考「题目描述」。

    输出描述:

    输出一个 n×mn×m 的矩阵 a,ai,jai,j 表示第 i 行第 j 列这个单词最后一次被背诵是在第几天。
    示例1

    输入

    复制
    3 3 3
    1 2
    2 3
    1 3

    输出

    复制
    0 0 2
    1 1 2
    3 3 3

    备注:

    n×m105,T105
    这个题当时傻逼了,直接就去莽了。t到自闭,后来发现不对劲
    才想到了正确解法

    开1e5*1e5会爆内存(全局不一定),而且会t,需要点四维转换,

    可以开两个数组a,b,a[i]表示第i行的背的第几天,

    b[i]表示第i列的背的第几天,

    因为会覆盖,天数越大越优先,所以最后要求的i行j列的背的最后天数为max(a[i],b[j])

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e5+10;
    int a[maxn],b[maxn];
    int main()
    {
        int n,m,t;
        int i,j;
        int k,l;
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        cin>>n>>m>>t;
        for(i=1; i<=t; i++)
        {
            cin>>k>>l;
            if(k==1)a[l-1]=i;
            else b[l-1]=i;
        }
        for(i=0; i<n; i++)
        {
            for(j=0; j<m; j++)
            {
                cout<<max(a[i],b[j])<<" ";
            }
            cout<<endl;
        }
        return 0;
    }
     
  • 相关阅读:
    git stash错误小记
    PHP,Mysql根据经纬度计算距离并排序
    JS~字符串长度判断,超出进行自动截取(支持中文)
    Redis的三种启动方式
    Ubuntu 14.04 LTS下安装Google Chrome浏览器
    PHP-PHPExcel用法详解
    git设置log的别名 for hist log样式格式化
    Ubuntu系统下配置PHP支持SQLServer 2005
    Git命令图片版
    《一线架构师实践指南》读后感(二)
  • 原文地址:https://www.cnblogs.com/tp25959/p/10359285.html
Copyright © 2020-2023  润新知