NOIP欢乐模拟赛 T1 解题报告
小澳的方阵
(matrix.cpp/c/pas)
【题目描述】
小澳最近迷上了考古,他发现秦始皇的兵马俑布局十分有特点,热爱钻研的小澳打算在电脑上还原这个伟大的布局。
他努力钻研,发现秦始皇布置兵马俑是有一定规律的。兵马俑阵总共有n行m列,秦始皇在布置的时候每次会指定一行或一列,然后指定一个兵种,使得这一行或者这一列上全部放上这一个兵种。如果这一行上以前放过其它的兵种,那么他会拔掉以前的兵种改成现在他命令的兵种。
小澳从秦朝的文献中找到了布置这个方阵的操作顺序,他希望你能告诉他布局完成后整个兵马俑阵是什么样子的。
【输入格式】
输入文件为matrix.in。
输入文件共q+1行。
输入文件第1行包括三个正整数n,m,q,分别表示兵马俑阵的行数和列数以及秦始皇总的操作数。
接下来q行,每行三个正整数,x,y,z,x表示操作种类,若x=1表示给第y行(y<=n)全部放上z这个兵种,若x=2,则表示给第y列(y<=m)全部放上z这个兵种,数据保证z<=2^31-1。
【输出格式】
输出文件名为matrix.out。
输出文件共n行,每行m个整数,分别用空格隔开。表示最后方阵上每个位置放的兵种,如果某个位置没有被操作过输出0。
【输入输出样例1】
|
matrix.in |
matrix.out |
|
3 3 3 1 1 3 2 2 1 1 2 2 |
3 1 3 2 2 2 0 1 0 |
【输入输出样例1说明】

【输入输出样例2】
|
matrix.in |
matrix.out |
|
5 3 5 1 1 1 1 3 1 1 5 1 2 1 1 2 3 1 |
1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 |
【数据规模与约定】
对于前20%的数据,n*m<=25。
对于前30%的数据,q<=2000。
对于100%的数据,n,m<=1000,n*m<=10^5,q<=10^6。
【提示】
因为本题输入文件较大,使用c++的选手可能会因为使用cin和cout导致超时。
解决方法是可以加<cstdio>库后使用scanf()函数和printf()来避免这种问题的出现。如果有不会使用上面两个输入输出函数的选手可以向在场的工作人员或监考老师求助。
————————————————————————分割线——————————————————————
分析:
因为放兵种和染色十分相似,所以后面就称为染色好了。
【algorithm1】 模拟。每次涂色对矩阵的一行或者一列操作。最后输出时输出矩阵即可。 时间复杂度 O(k*n),空间复杂度(n*m)。可以通过 123 的数据点。
【algorithm2】 注意到每次只染色一行或者一列,那么我们最后输出第 i 行第 j 列的数字是 多少的时候只需要看一下最后一次 i 行和第 j 行被染了什么颜色,所以我们需要 对每一行和一列记录最后一次染色的颜色。 但是我们也需要比较是行比列后染色还是列比行后染色,所以我们还需要记 录一下每行每列染色的最后时间。 综上,我们只需要对每一行和每一列开两个记录的值:一个记录最后一次染 色的时间,一个记录最后一次染色的颜色,然后比较 i 行和 j 列的时间大小即可 确定这个位置的颜色了。 时间复杂度 O(k+m*n),空间复杂度(n+m)。可以通过所有数据点。
原题来自 codeforces: http://codeforces.com/problemset/problem/631/B
代码:
#include "bits/stdc++.h" using namespace std ;
const int maxN = ;
const int INF = ;
struct Matrix { int col , time ;}; Matrix hang[ maxN ] , lie[ maxN ] ; int main ( ) {
int N , M , Q ;
freopen("sbsb.out","w",stdout);
scanf ( "%d%d%d" , &N , &M , &Q ) ;
for ( int i= ; i<=Q ; ++i ) {
int op , target , col_num ;
scanf ( "%d" , &op ) ;
if ( op== ) {
scanf ( "%d %d" , &target , &col_num ) ;
hang[ target ].col = col_num ;
hang[ target ].time = i ;
}
else if ( op== ) {
scanf ( "%d %d" , &target , &col_num ) ;
lie[ target ].col = col_num ;
lie[ target ].time = i ;
}
}
for ( int i= ; i<=N ; ++i ) {
for ( int j= ; j<=M ; ++j ) {
if ( lie[ j ].time > hang[ i ].time ) {
printf ( "%d " , lie[ j ].col );
}
else {
printf ( "%d " , hang[ i ].col );
}
}
printf ( "\n" ) ;
}
return ;
}
2016-10-03 20:22:14
(完)
NOIP欢乐模拟赛 T1 解题报告的更多相关文章
- NOIP欢乐模拟赛 T2 解题报告
小澳的坐标系 (coordinate.cpp/c/pas) [题目描述] 小澳者表也,数学者景也,表动则景随矣. 小澳不喜欢数学,可数学却待小澳如初恋,小澳睡觉的时候也不放过. 小澳的梦境中出现了一个 ...
- NOIP欢乐模拟赛 T3 解题报告
3.小澳的葫芦 (calabash.cpp/c/pas) [题目描述] 小澳最喜欢的歌曲就是<葫芦娃>. 一日表演唱歌,他尽了洪荒之力,唱响心中圣歌. 随之,小澳进入了葫芦世界. 葫芦世界 ...
- 20161007 NOIP 模拟赛 T1 解题报告
排序 3.1 题意描述 众所周知,熟练掌握至少一种排序算法是参加NOIP的必备技能.常见的排序算法有冒泡 排序.归并排序.快速排序.奇偶排序.猴子排序.梳排序.鸡尾酒排序.臭皮匠排序等. 在这里,介绍 ...
- 20161022 NOIP模拟赛 T1 解题报告
旅行者问题 [问题描述] lahub是一个旅行者的粉丝,他想成为一个真正的旅行者,所以他计划开始一段旅行.lahub想去参观n个目的地(都在一条直道上).lahub在起点开始他的旅行.第i个目的地和起 ...
- 20161023 NOIP 模拟赛 T1 解题报告
Task 1.纸盒子 (box.pas/box.c/box.cpp) [题目描述] Mcx是一个有轻度洁癖的小朋友.有一天,当他沉溺于数学卷子难以自拔的时候,恍惚间想起在自己当初学习概率的时候准备的一 ...
- 20161004 NOIP 模拟赛 T1 解题报告
第1题 小麦亩产一千八 [问题描述] “有了金坷垃,肥料一袋能顶两袋撒,小麦亩产一千八,吸收两米下的氮磷钾……”,话说HYSBZ(Hengyang School for Boys & Zy) ...
- 【HHHOJ】NOIP模拟赛 玖 解题报告
点此进入比赛 得分: \(100+20+100=220\)(还不错) 排名: \(Rank\ 16\) \(Rating\):\(+20\) \(T1\):[HHHOJ263]「NOIP模拟赛 玖」三 ...
- 【HHHOJ】NOIP模拟赛 捌 解题报告
点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...
- 20161005 NOIP 模拟赛 T2 解题报告
beautiful 2.1 题目描述 一个长度为 n 的序列,对于每个位置 i 的数 ai 都有一个优美值,其定义是:找到序列中最 长的一段 [l, r],满足 l ≤ i ≤ r,且 [l, r] ...
随机推荐
- C#的Attribute
using System; using System.Collections; using System.Collections.Generic; using System.IO; namespace ...
- .Learning.Python.Design.Patterns.2nd.Edition之单实例模式
可以慢慢理解.. 对照JAVA class Singleton(object): def __new__(cls): if not hasattr(cls, 'instance'): cls.inst ...
- 湘潭1247 Pair-Pair(树状数组)
分析: 给定n个二元组,求选出两个二元组(可以是同一个)组成一序列其LIS为1,2,3,4的方法数. 分别记为s1, s2, s3, s4 s1,s4对应的情形为a >= b >= c & ...
- jquery中ajax的简单使用
一.load() 这是最简单的一个函数,传入一个url他会异步加载该url的内容,然后将内容插入每一个选中的元素中,替换掉其中已经存在的内容. 所以最简单的用法是: $("#myDiv&qu ...
- 第三篇:用SOUI能做什么?
SOUI-DEMO界面预览 在回答SOUI能做什么之前,先看看SVN中demo工程的界面截图: 使用SOUI实现上面的界面主要的工作全在配置几个XML文件,基本不需要写C++代码.(如何配置XML布局 ...
- 【转】Struts2解决表单重复提交问题
用户重复提交表单在某些场合将会造成非常严重的后果.例如,在使用信用卡进行在线支付的时候,如果服务器的响应速度太慢,用户有可能会多次点击提交按钮,而这可能导致那张信用卡上的金额被消费了多次.因此,重复提 ...
- android常用对话框封装
在android开发中,经常会用到对话框跟用户进行交互,方便用户可操作性:接下来就对常用对话框进行简单封装,避免在项目中出现冗余代码,加重后期项目的维护量:代码如有问题欢迎大家拍砖指正一起进步. 先贴 ...
- LoadRunner如何监控Tomcat性能
使用LoadRunner做性能测试,一般的直觉是LR只能完成脚本录制和编写模拟用户的请求行为,但是在某些情况下,要监控一些中间件或web服务器的性能时,就不能通过录制脚本来完成了,那么就需要手工来编写 ...
- 《DSP using MATLAB》示例Example4.5
代码: x1 = [1, 2, 3]; x2 = [2, 4, 3, 5]; % x1 x2 sequences % n1 = 0:1:2; n2 = 0:1:3; n1 = -1:1:1; n2 = ...
- PHP学习笔记(一)
by Alina.Xia, dated on 2016.11.27 一.MyAql数据库PHP在开发web站点或管理一些系统时,需要对大量的数据进行保存.XML文件和文本文件虽然可以作为数据的整体,但 ...