小澳的方阵

(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. .netWeb方向:语言+技术

    常用语言+技术 C# T-Sql ADO.NEt JavaScript Asp.Net MVC HTML CSS DOM AJAX Entity Framework Regular expressio ...

  2. 设计模式学习之适配器模式(Adapter,结构型模式)(14)

    参考链接:http://www.cnblogs.com/zhili/p/AdapterPattern.html一.定义:将一个类的接口转换成客户希望的另一个接口.Adapter模式使得原本由于接口不兼 ...

  3. pyinstaller打包pyqt文件

    打包pyqt文件 如何将pyqt生成exe的二进制文件呢,pyinstaller就是这样的工具 可以将脚本文件.py 文件转换为编辑后的二进制文件,在进行发布 下面说下,如果打包 一. 安装: 下载地 ...

  4. SQL中的多表查询,以及JOIN的顺序重要么?

    说法是,一般来说,JOIN的顺序不重要,除非你要自己定制driving table. 示例: SELECT a.account_id, c.fed_id, e.fname, e.lname -> ...

  5. maven 依赖查询

    该文章源地址:http://xiejianglei163.blog.163.com/blog/static/1247276201362733217604/ 为方便个人使用,转载于此处. http:// ...

  6. hdu 4036 2011成都赛区网络赛F 模拟 **

    为了确保能到达终点,我们需要满足下面两个条件 1.能够到达所有山顶 2.能够在遇到苦土豆时速度大于他 二者的速度可以用能量守恒定律做,苦土豆的坐标可通过三角形相似性来做 #include<cst ...

  7. hdu 4055 递推

    转自:http://blog.csdn.net/shiqi_614/article/details/7983298 题意:由数字1到n组成的所有排列中,问满足题目所给的n-1个字符的排列有多少个,如果 ...

  8. 多进程程序设计,王明学learn

    多进程程序设计 一.函数学习 1.1 创建进程fork 1.1.1 函数原形 pid_t fork(void); 1.1.2 函数功能 创建一个子进程 1.1.3 所属头文件 <unistd.h ...

  9. bzoj1691[Usaco2007 Dec]挑剔的美食家 平衡树treap

    Description 与很多奶牛一样,Farmer John那群养尊处优的奶牛们对食物越来越挑剔,随便拿堆草就能打发她们午饭的日子自然是一去不返了.现在,Farmer John不得不去牧草专供商那里 ...

  10. Java学习笔记(四)——流程控制语句

    一.条件语句 1.if条件语句 (1)语法: if(条件) { 条件成立时的代码 } (2)执行过程 2.if else语句 if(条件) { 条件成立时的代码 } else { 不成立的代码 } 3 ...