首页 > 其他分享 >P1003 [NOIP2011 提高组] 铺地毯

P1003 [NOIP2011 提高组] 铺地毯

时间:2023-10-07 22:47:06浏览次数:40  
标签:y2 NOIP2011 int P1003 && y1 x1 地毯

第一思路:

开一个N*N的数组,每次都扫一遍地毯范围并标记编号

然后你会发现:喜提MLE


为什么呢?

我们来看看数据范围
0 ≤ n ≤ 1e4
n的范围是1e4,数组总大小为1e16,大约需要4000TB的内存空间

服务器也不带这么玩的


正解:

将地毯信息用结构体存储

struct node{
	int x1, y1, x2, y2;//x1 y1是左下角,x2 y2是右上角
}N[10005];

只有1次询问,可以从后向前扫描所有地毯,检查点(x, y)是否在地毯内部

for (int i = n; i >= 1; i--){//要找最上面地毯的编号,所以反着扫
	if(x >= N[i].x1 && x <= N[i].x2 && y >= N[i].y1 && y <= N[i].y2){
		ans = i;//从上面找到第一个覆盖到的地毯的编号,即为答案
		break;//找到答案之后直接跳出,输出答案
	}
}

完整die码

#include <bits/stdc++.h>

using namespace std;

int n, x, y, ans = -1;//ans初始值为-1,表示没有覆盖
int a, b, g, k;

struct node{
	int x1, y1, x2, y2;//x1 y1是左下角,x2 y2是右上角
}N[10005];

int main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);

	cin >> n;
	for (int i = 1; i <= n; i++){
		cin >> a >> b >> g >> k;
		N[i] = {a, b, a + g - 1, b + k - 1};//存储第i个地毯左下角和右上角的坐标
	}
	cin >> x >> y;
	for (int i = n; i >= 1; i--){//要找最上面地毯的编号,所以反着扫
		if(x >= N[i].x1 && x <= N[i].x2 && y >= N[i].y1 && y <= N[i].y2){
			ans = i;//从上面找到第一个覆盖到的地毯的编号,即为答案
			break;//找到答案之后直接跳出,输出答案
		}
	}
    //如果一直没有跳出,代表没有地毯覆盖

	cout << ans << '\n';

	return 0;
}

标签:y2,NOIP2011,int,P1003,&&,y1,x1,地毯
From: https://www.cnblogs.com/mle-automation/p/17747659.html

相关文章

  • 【题解】洛谷 P1003 [NOIP2011 提高组] 铺地毯
    原题链接解题思路如果直接按照题意开一个二维数组来模拟每个点最上面的地毯编号,会发现所占空间最坏情况下约为(2*105)2*4B=4*1010*4B=1.6*1011B≈149GB,程序完全无法运行。但实际上没有必要将每一个点的信息记录下来,只需要记录每一块地毯能覆盖哪些点,再依次判断哪那些地毯可以......
  • 铺地毯---算法题
    题目描述为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有张地毯,编号从到。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。地毯铺设完成后,组织者想知道......
  • NOIP2011提高组初赛易错题解析
    一.7.错误原因:不知道解析:快速排序在理论上最低的时间复杂度为O(n),但实际最低的时间复杂度为O(nlogn) 二.1.错误原因:漏项了解析:这棵树最少有12层,但题目是问可能是几层,所以还可能是2011层 5.错误原因:漏了一种情况解析:这道题的树有两种,所以答案也有两种 ......
  • 洛谷P1228 地毯填补问题
    1#include<bits/stdc++.h>2usingnamespacestd;3intk,x,y;45intjudge(intx,inty,intgx,intgy,intlen)//判断障碍物在哪个区块6{7if(gx<=x+len/2-1&&gy<=y+len/2-1)8return1;9else......
  • 题解 [NOIP2011 提高组] 聪明的质监员
    题目链接不难发现,\(W\)越大,\(y_i\)以及\(y\)就越小,\(W\)越小,\(y_i,y\)就越大。所以这是一个二分答案。考虑如何\(check\)。观察\[y_i=\sum\limits_{j=l_i}^{r_i}[w_j\geW]\times\sum\limits_{j=l_i}^{r_i}[w_j\geW]v_j\]不难发现,乘号的前后都是区间和的形式,有......
  • 洛谷3397地毯
        问题分析:这个比y总的二维差分模板要简单一些,因为他一开始的矩阵都为0,而且矩阵是一个n方阵,那么其实可以用y总的模板来写,下面是二维差分矩阵的原理  #include<iostream>usingnamespacestd;constintN=1010;intb[N][N];voidinsert(intx1,in......
  • 算法学习记录:[NOIP2011]铺地毯
    题目链接:https://ac.nowcoder.com/acm/contest/20960/1016解题思路:最直观的方法,因为编号大的地毯一定更靠后,所以直接用编号进行标记。时间复杂度分析:该代码时间复杂度为\(O(N^2)\),有\((10^5)^2\),评测oj每1秒能接受的时间复杂度为:\([10^8,10^9]\)所以下代码一定TLE。TLE......
  • [NOIP2011 普及组] 数字反转
    [NOIP2011普及组]数字反转题目描述给定一个整数\(N\),请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。输入格式一个整数\(N\)。输出格式一个整数,表示反转后的新数。样例#......
  • 全国信息学奥林匹克联赛(NOIP2011)复赛提高组day2
    一、计算系数首先对题目多项式进行简化分析(x+y)2=x2+2xy+y2(x+y)3=x3+3x2y+3xy2+y2(x+y)4=x4+4x3y+6x2y2+4xy3+y4不难发现它们的系数组成了一个杨辉三角111121133114641……进一步带入则可得(ax+by)2=a2x2+2abxy+b2y2(ax+by)3=a3x3+3a2bx2y+3ab2xy2+b3y3......
  • 23.5.2 NOIP2011 Day1提高游记
    今天做的比较得愉快快呢,除了第三题hh1.铺地毯这题我不做太多评价,纯纯的一道大水题。注意遍历数据的时候倒着遍历,还有就是不能用二维数组,会MLE。code:1#include<bits/stdc++.h>2#defineN100053usingnamespacestd;4inta[N],b[N],g[N],k[N];5inlinelongl......