一个蒟蒻的解题过程记录——洛谷P1003 铺地毯
这到题算是我“火线回归”后码的第一道题,病好了心情不错,发篇博客分享一下
目录:
·题目描述
·题目分析
·解题思路
·代码实现
·总结
·题目描述:
为了准备一场特殊的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有n张地毯,编号从1到n。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。
·题目分析:
这道题看上去是一道很水很水的模拟题,一般人的第一思路就是套上三层循环,用一个二维数组模拟会场的每一块地板。不错, 我一开始也是这样想的,代码如下:
- #include<cstdio>
- #include<iostream>
- using namespace std;
- int n;
- int a,b,g,k,xx,yy;
- int ground[][]={-};//赋值为-1的目的是如果没有被赋值,就可以直接输出-1,不用再判断了(其实就是懒)
- int main()
- {
- scanf("%d",&n);
- for(int i=;i<=n;++i)
- {
- scanf("%d%d%d%d",&a,&b,&g,&k);//没有用数组,再每次输入的同时进行处理(用了数组之后的效果不如这样处理好)
- for(int j=a;j<=a+g;++j)
- for(int n=b;n<=b+k;++n)//又是两层循环,将每一块受到影响的(既需要更新的)地板的坐标进行枚举
- ground[j][n]=i;//将这块地板附上最后一次赋值的值(模拟的是最上面的一块地毯)
- }
- scanf("%d%d",&xx,&yy);
- printf("%d",ground[xx][yy]);//直接查找需要查找的地板最上面是那一块地毯
- return ;
- }
是的,这道题看上去很水,上面的代码看似完美无缺。但是结果是这样的:
是的,就是149.79s
所以,是什么导致了这种结果的发生呢???于是,我不要脸的点开了题解
原来,按照我的做法似是肯定会MLE的,因为这道题很坑,出题人的目的就是让我们将数据从前往后读入,再从后往前循环,从而求解(具体解题思路请继续往下看)
·解题思路:
根据上面的结论,我们可以找到一个更快、更优、更好的算法。
先将第2~n+1行的数据读入,存到一个二维数组中,然后从n~1枚举每一组数据,查看第一个包括需要查询的点的地毯。如果有,就直接输出这个地毯的编号,结束程序;如果没有,就输出“-1”,同样结束程序;
·代码实现:
说了这么多,没有代码怎么能行呢???
- #include<cstdio>
- #include<iostream>
- using namespace std;
- int shuju[][];//定义一个“数据”数组,用来读入每一组数据
- int n,xx,yy;
- int main()
- {
- scanf("%d",&n);
- for(int i=;i<=n;++i)
- for(int j=;j<=;++j)
- scanf("%d",&shuju[i][j]);//读入数据ing
- scanf("%d%d",&xx,&yy);
- for(int i=n;i>=;i--)//从n~1循环
- {
- if((shuju[i][]<=xx)&&(shuju[i][]+shuju[i][]>=xx)&&(shuju[i][]<=yy)&&(shuju[i][]+shuju[i][]>=yy))//判断要找的点是否再这个地毯内
- {
- printf("%d",i);//如果有,就输出该点的编号
- return ;//直接结束程序
- }
- }
- printf("-1");//如果没有,就输出-1
- return ;//还是结束程序
- }
·总结:
这道题还是很坑的,因为这道题不是单纯无脑的模拟,而是运用到了某种类似于“逆推还原”的思想,思路并不是很好想。所以在以后的解题过程当中,不要想当然,一定要仔细斟酌,然后就能AC啦!
一个蒟蒻的解题过程记录——洛谷P1003 铺地毯的更多相关文章
- 洛谷P1003 铺地毯 noip2011提高组day1T1
洛谷P1003 铺地毯 noip2011提高组day1T1 洛谷原题 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n ...
- [NOIP2011] 提高组 洛谷P1003 铺地毯
题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...
- 洛谷P1003铺地毯(提高组)
题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n. 现在将这些地毯按照编号从小到大的顺序平行于 ...
- (水题)洛谷 - P1003 - 铺地毯
https://www.luogu.org/problemnew/show/P1003 一开始觉得是用树套树来区间修改单点查询,但是发现空间不够开. 看了题解发现这个是静态的问题,而且只问一个点的结果 ...
- 洛谷—— P1003 铺地毯
https://www.luogu.org/problem/show?pid=1003 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形 ...
- 洛谷P1003 铺地毯 模拟
这一题就是一个很普通的模拟,每次输入的时候存储四个角的值 把四个角的横纵坐标存储在一排.然后在倒序遍历一遍,查找的时候就看所要查找的坐标在不在这个范围内,如果找到了就标记一下再输出,如果没有找到就输出 ...
- 洛谷 P1003 铺地毯
嗯.... 一道比较水的模拟题.. 刚拿到题的时候被它的数据范围吓到了,二维数组不可能开那么大啊,可是一边做发现测试数据太水 ... 先看一下题吧... 题目描述 为了准备一个独特的颁奖典礼,组织者在 ...
- java解洛谷P1003铺地毯问题
此题给出的最大地毯数量为10000,创建[10001][4]长度的二维数组 以稀松数组的方法,[第i个地毯]的 [0][1][2][3]分别保存地毯的坐标和大小 再用需要求的坐标比较即可 public ...
- noip2013Day2T3-华容道【一个蒟蒻的详细题解】
描述 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面,华容道是否根本就无法完成,如果能完成,最少需要多少时间. 小 B 玩的华容道与经典的 ...
随机推荐
- Git小结---So far.......
基本的: 1. 在配置了SSH Key的情况下,clone项目时使用:git clone git@github.com/用户名/仓库名.git 使用这种方式而不使用https的方式的好处在于,在pu ...
- 初探css -11 Table表格
CSS 表格 使用 CSS 可以使 HTML 表格更美观. Company Contact Country Alfreds Futterkiste Maria Anders Germany Bergl ...
- mysql之innodb存储引擎
mysql之innodb存储引擎 innodb和myisam区别 1>.InnoDB支持事物,而MyISAM不支持事物 2>.InnoDB支持行级锁,而MyISAM支持表级锁 3>. ...
- Linux 开机文件系统发生错误
1 如果/目录没有损毁,那么开机的时候,屏幕会提示:press root password or ctrl +D,这个时候请输入root密码登陆系统,然后进行如下操作: 1)在光标处输入root密码登 ...
- 解决CRMEasy新建咨询不能保存问题
系统时间必须为24H制 将12H制修改为24H制的方法:(XP系统) 控制面板---区域和语言选项----区域选项-----自定义---时间----时间格式为:HH:mm:ss-----确定
- React-Redux 总结
一.定义与功能 React-Redux 将所有组件分成两大类:UI 组件(presentational component)和容器组件(container component) 1.UI 组件特征: ...
- Xshell6-项目使用
前端开发中,涉及服务器的地方一般都交给后端处理,这样有时候很不方便,所以,自己来上传服务器是非常爽的啦 工具: Xshell6 传送门: http://www.netsarang.com/produc ...
- 解决ios横屏拍照图片自动旋转90度问题
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- java数据结构5--集合Map
Map Map与Collection在集合框架中属并列存在 Map存储的是键值对<K,V> Map存储元素使用put方法,Collection使用add方法 Map集合没有直接取出元素的方 ...
- Mac OS找不到/usr/include文件夹的解决办法
Mojave最新解决方案:终端执行: xcode-select --install #完成后执行 sudo installer -pkg /Library/Developer/CommandLineT ...