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
代码:
1 #include "bits/stdc++.h" 2 3 using namespace std ; 4 const int maxN = 11000 ; 5 const int INF = 2147483647 ; 6 struct Matrix { int col , time ;}; 7 8 Matrix hang[ maxN ] , lie[ maxN ] ; 9 10 int main ( ) { 11 int N , M , Q ; 12 freopen("sbsb.out","w",stdout); 13 scanf ( "%d%d%d" , &N , &M , &Q ) ; 14 for ( int i=1 ; i<=Q ; ++i ) { 15 int op , target , col_num ; 16 scanf ( "%d" , &op ) ; 17 if ( op==1 ) { 18 scanf ( "%d %d" , &target , &col_num ) ; 19 hang[ target ].col = col_num ; 20 hang[ target ].time = i ; 21 } 22 else if ( op==2 ) { 23 scanf ( "%d %d" , &target , &col_num ) ; 24 lie[ target ].col = col_num ; 25 lie[ target ].time = i ; 26 } 27 } 28 for ( int i=1 ; i<=N ; ++i ) { 29 for ( int j=1 ; j<=M ; ++j ) { 30 if ( lie[ j ].time > hang[ i ].time ) { 31 printf ( "%d " , lie[ j ].col ); 32 } 33 else { 34 printf ( "%d " , hang[ i ].col ); 35 } 36 } 37 printf ( "\n" ) ; 38 } 39 return 0 ; 40 }
2016-10-03 20:22:14
(完)
转载于:https://www.cnblogs.com/shadowland/p/5929559.html
NOIP欢乐模拟赛 T1 解题报告相关推荐
- 20161023 NOIP 模拟赛 T1 解题报告
Task 1.纸盒子 (box.pas/box.c/box.cpp) [题目描述] Mcx是一个有轻度洁癖的小朋友.有一天,当他沉溺于数学卷子难以自拔的时候,恍惚间想起在自己当初学习概率的时候准备的一 ...
- 【HHHOJ】NOIP模拟赛 捌 解题报告
点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...
- CH Round #55 - Streaming #6 (NOIP模拟赛day2)解题报告
T1九九归一 描述 萌蛋在练习模n意义下的乘法时发现,总有一些数,在自乘若干次以后,会变成1.例如n=7,那么5×5 mod 7=4,4×5 mod 7=6,6×5 mod 7=2,2×5 mod 7 ...
- 20161003 NOIP 模拟赛 T2 解题报告
Weed duyege的电脑上面已经长草了,经过辨认上面有金坷垃的痕迹. 为了查出真相,duyege 准备修好电脑之后再进行一次金坷垃的模拟实验. 电脑上面有若干层金坷垃,每次只能在上面撒上一层高度为 ...
- 【洛谷】NOIP2018原创模拟赛DAY1解题报告
点此进入比赛 T1:小凯的数字 题意:给定q个l,r,求l(l+1)(l+2)...(r-1)r模9的结果 很显然,这是道考验数(运)学(气)的题目 结论:输出\((l+r)*(r-l+1)\over ...
- nowcoder 提高组模拟赛 选择题 解题报告
选择题 链接: https://www.nowcoder.com/acm/contest/178/B 来源:牛客网 题目描述 有一道选择题,有 \(a,b,c,d\) 四个选项. 现在有 \(n\) ...
- 洛谷 10月 csp-s 模拟赛 T1,T2解析及代码
洛谷 10月 csp-s 模拟赛 T1,T2解析及代码 T1 Magenta Potion 题目描述 给定一个长为 nnn 的整数序列 aaa,其中所有数的绝对值均大于等于 222.有 qqq 次操作 ...
- NOIP 2018模拟赛(模拟) 2018 11 3 A组 Day1 T1
T1 铃仙的红色之瞳(eyes) 题目描述 为了方便你的预测,铃仙对该符卡进行了改造. 敌方非常强大,可以看作有无限的体力.通过该符卡,铃仙可以释放出子弹,敌方触碰到子弹就会损失一格体力.注意,每次敌 ...
- 【2019.7.16 NOIP模拟赛 T1】洗牌(shuffle)(找环)
找环 考虑每次洗牌其实是一次置换的过程,而这样必然就会有循环出现. 因此我们直接通过枚举找出每一个循环,询问时只要找到环上对应的位置就可以了. 貌似比我比赛时被卡成\(30\)分的倍增简单多了? 代码 ...
- ztz11的noip模拟赛T1:愤怒的XiaoX
链接: https://www.luogu.org/problemnew/show/U47231 思路: 这道题其实就是一道双Lazy线段树裸题 因为我们知道,当k一定时,取反偶数次最后k位等于不取反 ...
最新文章
- ubuntu和windows系统双系统的开机选项界面有很多无关选项
- 【资源分享】数字图像处理MATLAB版冈萨雷斯+中文高清版+随书源码链接
- JauntVR中文版登陆小米商店,首波内容有《五十度黑》
- python range从大到小排列_python 十大经典排序算法
- 三角剖分算法的数学理解
- SpringBoot整合Shiro(认证+授权)
- 对比Ruby和Python的垃圾回收(2):代式垃圾回收机制
- 27.产品经理需要具备的数据分析能力
- OpenMV常用函数整理
- 开始研究WEKA,一个开源java的数据挖掘工具
- go程序员面试算法宝典 pdf_Kotlin程序员面试算法宝典 PDF 下载
- 新版USBCAN卡CAN分析仪的CANCANFD综合测试分析软件LKMaster主要功能介绍
- 解锁网易云音乐客户端变灰歌曲的详细教程
- 驳《寒门再难出贵子》——谁说寒门大学生没有春天!
- c语言实数的输出和占位_C语言输出格式总结
- linux 网卡驱动编译安装包,CDlinux网卡驱动的编译、安装、集成
- 安排座位 java_座位安排(seat)
- Ant Design Pro -- 02项目结构@20210331
- 免费合并多个PDF文件
- 快速Ps在线P图#稿定
热门文章
- 如何在 Mac 上的调度中心中查看打开的窗口和空间?
- Xcode之developer tools access
- Red Giant Trapcode Suite 17 for Mac视频编辑粒子插件
- 在 Mac 上的“访达”中排序和排列项目
- openSUSE Tumbleweed 支持 Linux Kernel 4.20
- svn版本备份和恢复注意事项
- Wormhole —— Docker 容器的服务连接代理
- SLF4J: The requested version 1.5.8 by your slf4j
- cmd命令配置MySQL
- Exchange 2003 RPC over Http