小澳的方阵

(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 解题报告的更多相关文章

  1. NOIP欢乐模拟赛 T2 解题报告

    小澳的坐标系 (coordinate.cpp/c/pas) [题目描述] 小澳者表也,数学者景也,表动则景随矣. 小澳不喜欢数学,可数学却待小澳如初恋,小澳睡觉的时候也不放过. 小澳的梦境中出现了一个 ...

  2. NOIP欢乐模拟赛 T3 解题报告

    3.小澳的葫芦 (calabash.cpp/c/pas) [题目描述] 小澳最喜欢的歌曲就是<葫芦娃>. 一日表演唱歌,他尽了洪荒之力,唱响心中圣歌. 随之,小澳进入了葫芦世界. 葫芦世界 ...

  3. 20161007 NOIP 模拟赛 T1 解题报告

    排序 3.1 题意描述 众所周知,熟练掌握至少一种排序算法是参加NOIP的必备技能.常见的排序算法有冒泡 排序.归并排序.快速排序.奇偶排序.猴子排序.梳排序.鸡尾酒排序.臭皮匠排序等. 在这里,介绍 ...

  4. 20161022 NOIP模拟赛 T1 解题报告

    旅行者问题 [问题描述] lahub是一个旅行者的粉丝,他想成为一个真正的旅行者,所以他计划开始一段旅行.lahub想去参观n个目的地(都在一条直道上).lahub在起点开始他的旅行.第i个目的地和起 ...

  5. 20161023 NOIP 模拟赛 T1 解题报告

    Task 1.纸盒子 (box.pas/box.c/box.cpp) [题目描述] Mcx是一个有轻度洁癖的小朋友.有一天,当他沉溺于数学卷子难以自拔的时候,恍惚间想起在自己当初学习概率的时候准备的一 ...

  6. 20161004 NOIP 模拟赛 T1 解题报告

    第1题  小麦亩产一千八 [问题描述] “有了金坷垃,肥料一袋能顶两袋撒,小麦亩产一千八,吸收两米下的氮磷钾……”,话说HYSBZ(Hengyang School for Boys & Zy) ...

  7. 【HHHOJ】NOIP模拟赛 玖 解题报告

    点此进入比赛 得分: \(100+20+100=220\)(还不错) 排名: \(Rank\ 16\) \(Rating\):\(+20\) \(T1\):[HHHOJ263]「NOIP模拟赛 玖」三 ...

  8. 【HHHOJ】NOIP模拟赛 捌 解题报告

    点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...

  9. 20161005 NOIP 模拟赛 T2 解题报告

    beautiful 2.1 题目描述 一个长度为 n 的序列,对于每个位置 i 的数 ai 都有一个优美值,其定义是:找到序列中最 长的一段 [l, r],满足 l ≤ i ≤ r,且 [l, r] ...

随机推荐

  1. 动态生成SQL执行语句

    SET @qry = 'SELECT product_cd, name, product_type_cd, date_offered, date_retired FROM product WHERE ...

  2. DES加密算法实现

    好久没写博客了,正好趁着实现网络工程与安全的DES算法的功夫,把代码发上来. DES的介绍可见:DES加密 原理不赘述了..实在太多,其实就是一个形式化算法,按部就班的实现就可以,只不过有些繁琐,我写 ...

  3. PowerDesigner生成sql及HTML格式数据库文档

    一.PowerDesigner生成sql问题 生成sql的方法是 Database -->Generate Database (Ctrl + G ) 但是提示 Could not load VB ...

  4. B树算法与实现 (C语言实现)

    B树的定义 假设B树的度为t(t>=2),则B树满足如下要求:(参考算法导论) (1)  每个非根节点至少包含t-1个关键字,t个指向子节点的指针:至多包含2t-1个关键字,2t个指向子女的指针 ...

  5. .deb文件打包

    最近因项目需要,需要把文件夹打包为.deb格式的包,幸亏一位朋友帮忙指导了我一个晚上,才得以完成,这里再次对他表示感谢. 整理打包流程如下: 请先参考此博客内容,了解deb文件打包 如何制作Deb包和 ...

  6. 初探Docker

    本文旨在让大家了解什么是Docker,并带领大家体验Docker使用的整个流程. 开启Docker学习之旅前,我们简单描述几个场景,应该很多人都有碰到过: 小凹同学开发了一个web应用,服务器环境是: ...

  7. Android 开发工具之Codota

    Codota 的特性 的确,正如codota 官方所说,的确是精品,他的搜索源,不仅只有Github,而且还有知名博客和开发者网站,让你搜索一个东西,不用在找上半天: 除了搜索功能,首页的下方还罗列比 ...

  8. Windows服务定时执行任务

    1.创建多线程类 /// <summary> /// 多线程 /// </summary> public abstract class MuliThread<T> ...

  9. POJ 1509 最小表示法

    题目链接:http://poj.org/problem?id=1509 题意:给定一个字符串,求一个起点使字符串从该起点起的字符串字典序最小[题目的字符串起点从1开始] 思路:最小表示法模板题 #de ...

  10. shell-bash学习02运算、拼接、重定向

    运算 let操作 可以直接执行基本的算术操作;使用时,变量名之前不需要再添加$; #!/bin/bash no1=4; no2=5; let result=no1+no2 echo $result 自 ...