zoukankan      html  css  js  c++  java
  • Rinne Loves Study

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

    题目描述

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

    输入描述:

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

    输出描述:

    ​ 输出一个(n imes m)的矩阵a,(a_{ij}) 表示第 i 行第 j 列这个单词最后一次被背诵是在第几天。

    示例1

    输入

    3 3 3
    1 2
    2 3
    1 3
    

    输出

    0 0 2
    1 1 2
    3 3 3
    

    备注:

    (n imes m leq 10^{5},Tleq 10^{5})

    题解

    暴力做法:

    #include<iostream>
    #include<cstring>
    using namespace std;
    int main(){
    	int n,m,T;
    	int a,b;
    	scanf("%d%d%d",&n,&m,&T);
    	int map[n+1][m+1];
    	memset(map,0,sizeof(map));
    	for(int i=1;i<=T;i++){
    		scanf("%d%d",&a,&b);
    		if(a==1){
    			for(int j=1;j<=m;j++){
    				map[b][j]=i;
    			}
    		}
    		if(a==2){
    			for(int j=1;j<=n;j++){
    				map[j][b]=i;
    			}
    		}
    	}
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=m;j++){
    			printf("%d ",map[i][j]);
    		}
    		printf("
    ");
    	}
    	return 0;
    }
    

    很奇怪的是这题暴力也可以做,暴力的话,定义一个二维数组,然后根据天数顺序来维护这个数组,比如第一天背了第2行的单词,就把这个数组第2行都刷成1,第五天背了第6列的单词,就把这个数组第6列都刷成5,最后得到的二维数组就是答案

    非暴力法:

    #include<iostream>
    using namespace std;
    int Col[100005];//保存列 
    int Row[100005];//保存行 
    int main(){
    	int n,m,T;
    	scanf("%d%d%d",&n,&m,&T);
    	for(int i=1;i<=T;i++){
    		int a,b;
    		scanf("%d%d",&a,&b);
    		//保存行 
    		if(a==1){
    			Row[b]=i;
    		}	
    		//保存列 
    		else if(a==2){
    			Col[b]=i;
    		}
    	} 
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=m;j++){
    			printf("%d ",max(Row[i],Col[j]));
    		}
    		printf("
    ");
    	}
    	return 0;
    }
    

    我们只定义两个数组,一个存放行的信息,一个存放列的信息,当第一天背了第2行的单词时,我们就把行数组中下标为2的元素赋值1,当第五天背了第6列的单词时,我们就把列数组中下标为6的元素赋值为5,然后输出的时候,就输出对应的行数组和列数组中较大的那个,因为最后一次背这个单词的天数肯定大,比如说,我们要输出第2行第3列的数,那么我们就比较一下,行数组下标为2的元素和列数组下标为3的元素的大小,输出大的。

  • 相关阅读:
    Leetcode题目94.二叉树的中序遍历(中等)
    Leetcode题目79.单词搜索(回溯+DFS-中等)
    Leetcode题目78.子集(回溯-中等)
    Leetcode题目75.颜色分类(双指针-中等)
    Leetcode题目70.爬楼梯(动态规划+递归-简单)
    Leetcode题目64.最小路径和(动态规划-中等)
    Android 学习笔记之切换主题
    Android学习笔记:摇一摇功能的实现
    百思不得姐demo,只写了视频,图片,和段子,需要的童鞋进
    自己写的音乐播放器Demo开源给需要学习的人,大家编程路上一直进步,
  • 原文地址:https://www.cnblogs.com/fate-/p/13448285.html
Copyright © 2011-2022 走看看