Rinne Loves Study

Rinne Loves Study

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

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

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×m≤1e5,T≤1e5n×m≤1e5,T≤1e5

解题思路:单看数据范围来说,二维数组是存不下整个地图的,所以我们可以换个思路来考虑这道题,将他当做一个模拟题来写

用两个数组来分别表示行和列然后,每一个位置的最大值则是两数组之间的较大值

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
	int h[100005] = {0}, l[100005] = {0};//两个数组存行和列 
	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)
		{
			h[b] = i;
		}
		if(a == 2)
		{
			l[b] = i;
		}
	}
	for(int i = 1; i <= n; i++)
	{
		for(int j = 1; j <= m; j++)
		{
			printf("%d ", max(h[i], l[j]));
		}
		printf("\n");
	}
}

猜你喜欢

转载自blog.csdn.net/w__000000wbt/article/details/87914936
今日推荐