Rinne Loves Study

时间:2019-02-11
本文章向大家介绍Rinne Loves Study,主要包括Rinne Loves Study使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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

Rinne Loves Study
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
Rinne 喜欢使用一种奇怪的方法背单词,现在这些单词被放在了一个
n
×
m
n×m 的格子里。由于背单词是一个令人烦躁的事情,所以她决定每天只背同一行或者同一列的单词。她一共会背 T 次单词,为了方便巩固,她现在想知道:对于每个单词,最后一次背是什么时候呢?
她这么可爱当然会算啦!但是她想考考你。
输入描述:
第一行三个整数 n,m,T。
接下来 T 行,第 i+1 行描述第 i 天干了什么,每行的格式如下:
1 x:说明她在这一天背了第 x 行的单词;
2 y说明她在这一天背了第 y 列的单词。
输入的所有量的具体意义请参考「题目描述」。
输出描述:
输出一个
n
×
m
n×m 的矩阵 a,
a
i
,
j
ai,j 表示第 i 行第 j 列这个单词最后一次被背诵是在第几天。
示例1
输入
复制
3 3 3
1 2
2 3
1 3
输出
复制
0 0 2
1 1 2
3 3 3
备注:
n
×
m

10
5
,
T

10
5

思路:刚开始的时候是打算直接模拟就行,因为思路很容易就出了,所以没注意到数据的范围,所以后来改了一下,换成两个一维数组来存储数据,时间复杂度就降了下去。

超时代码O(nmt):

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int m=sc.nextInt();
        int t=sc.nextInt();
        int [][]num=new int[n][m];
        int time=1;
        int tmp=0;
        int index=0;
        int i=0;int j=0;
        while(t>0){
            tmp=sc.nextInt();
            index=sc.nextInt();
            if(tmp==1)
                for(i=0;i<m;i++)
                    num[index-1][i]=time;
            else
                for(i=0;i<n;i++)
                    num[i][index-1]=time;
            time++;
            t--;
        }
        for(i=0;i<n;i++){
            for(j=0;j<m;j++){
                System.out.print(num[i][j]+" ");
            }
            System.out.println();
        }
        sc.close();
    }
}

AC代码O(t):

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int m=sc.nextInt();
        int t=sc.nextInt();
        int []hang=new int[n];
        int []lie=new int[m];
        int time=1;
        while(t>0){
            int tmp=sc.nextInt();
            int index=sc.nextInt();
            if(tmp==1)
                hang[index-1]=time;
            else
                lie[index-1]=time;
            time++;
            t--;
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                System.out.print(Math.max(hang[i],lie[j])+" ");
            }
            System.out.println();
        }
        sc.close();
    }
}