列表

详情


NC22595. Rinne Loves Study

描述

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

输入描述

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

输出描述

输出一个  的矩阵 a, 表示第 i 行第 j 列这个单词最后一次被背诵是在第几天。

示例1

输入:

3 3 3
1 2
2 3
1 3

输出:

0 0 2
1 1 2
3 3 3

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

pypy3(pypy3.6.1) 解法, 执行用时: 444ms, 内存消耗: 27352K, 提交时间: 2020-08-06 20:52:41

n,m,t=map(int,input().split())
f1=[0 for i in range(n)]
f2=[0 for i in range(m)]
for i in range(t):
    op,x=map(int,input().split())
    x-=1
    if op==1:
        f1[x]=i+1
    else:
        f2[x]=i+1
for i in range(n):
    for j in range(m):
        print(max(f1[i],f2[j]),end=" \n"[j==m-1])

Python3(3.5.2) 解法, 执行用时: 385ms, 内存消耗: 6720K, 提交时间: 2020-08-06 18:27:43

n, m, T = map(int, input().split())
asd=[0]*n
shuk=[0]*m
for i in range(1,T+1):
    a,b=map(int,input().split())
    if a==1:
        asd[b-1]=i
    else:
        shuk[b-1]=i
for i in range(n):
    for j in range(m):
        print("{:d}".format(max(asd[i],shuk[j])),end=" ")
    print()

C++11(clang++ 3.9) 解法, 执行用时: 83ms, 内存消耗: 1292K, 提交时间: 2019-12-31 21:01:34

#include<bits/stdc++.h>
using namespace std;
int a[100000],b[100000];
int main(){
	int n,m,t,x,y,i,j;
	cin>>n>>m>>t;
	for(i=1;i<=t;i++){
		cin>>x>>y;
		if(x==1) a[y-1]=i;
		else b[y-1]=i;
	}
	for(i=0;i<n;i++){
		for(j=0;j<m;j++)
			cout<<max(a[i],b[j])<<" ";
		cout<<endl;
	}
}

C++14(g++5.4) 解法, 执行用时: 87ms, 内存消耗: 1884K, 提交时间: 2019-08-01 17:31:51

#include<bits/stdc++.h>
using namespace std;
int a[100000],b[100000];
int main(){
	int n,m,t,x,y,i,j;
	cin>>n>>m>>t;
	for(i=1;i<=t;i++){
		cin>>x>>y;
		if(x==1) a[y-1]=i;
		else b[y-1]=i;
	}
	for(i=0;i<n;i++){
		for(j=0;j<m;j++)
			cout<<max(a[i],b[j])<<" ";
		cout<<endl;
	}
}

上一题