题解 P1003 【铺地毯】

关于 P1003 铺地毯 的答案 and some problem

关于此题,铺地毯,那就一张张铺吧。

这样不是很好?

模拟

来一段:


#include<bits/stdc++.h>

using namespace std;

int n;
int a,b,g,k;
int x,y;
short mp[10010][10010];//map与我有仇
int main()
{
	scanf("%d",&n);
	for(register int jsq=1;jsq<=n;jsq++)
	{
		scanf("%d%d%d%d",&a,&b,&g,&k);
		for(register int i=a;i<=a+g;i++)
		{
			for(register int j=b;j<=b+k;j++)
			{
				mp[i][j]=jsq;
			}
		}
	}
	scanf("%d%d",&x,&y);
	if(mp[x][y]>=1)
	{
		printf("%hd",mp[x][y]);
	}
	else printf("-1");
	return 0;
}

很明显一张一张铺,后边的地毯将前面的覆盖,数字覆盖


but

洛谷告诉我:Unaccepted 50

AC RE AC AC AC AC RE RE RE MLE

这么辣鸡的做法怎么可以过,过了则毫无天理。

语文不好的人向来是先粘代码的


#include<bits/stdc++.h>

using namespace std;

int n;
int a[10010],b[10010],g[10010],k[10010];
int x,y;
int ans=-1
int main()
{
	scanf("%d",&n);
	for(register int i=1;i<=n;i++)
	{
		scanf("%d%d%d%d",&a[i],&b[i],&g[i],&k[i]);
	}
	scanf("%d%d",&x,&y);
	for(register int i=n;i>=1;i--)
    {
    	if(a[i]<=x&&x<=a[i]+g[i]&&b[i]<=y&&y<=b[i]+k[i])
		{
		    ans=i;
			break;
		}
	}
	printf("%d",ans);
	return 0;
}

(敲黑板)思路改变

不选择“铺”,而是只见范围去算,合适就改变。

倒着循环的,以免一些可怕的问题

同时,后铺的地毯要比先铺的位置要更靠上,那么,从最后铺的地毯开始查找,会更省时间。

同时将多余的,无需计算的部分删掉,不理它。

就这样。

完了吗?

还有一件事:数据内没有 -1 !!!!!!

谢谢!!!

完结撒花~~~~~~


做人做事最好的状态就是:不刻意。不刻意自我表现,也不刻意淡泊名利;不刻意迎合,也不刻意狂狷;不刻意追逐流行,也不刻意卓尔不群。如是,则不心累,不纠结,不失望。

The best state of being a man is: not deliberately. Not deliberately self - expression, and not deliberately indifferent to fame and wealth; not deliberately to cater for, nor deliberate crazy; not deliberately chasing popular, not deliberately outstanding. If it is, it is not tired, not entangled, not disappointed.

身を処して事をしてベストな状態ではないか。自己表現もない工夫を凝らし、工夫を凝らして名利にはあっさりしないにも工夫を凝らして、工夫を凝らして狂強情なない工夫を凝らして追いかけて流行、工夫を凝らして衆人より一段優れている。このように、心は疲れない、からみ合って、失望しない。

原文地址:https://www.cnblogs.com/XSZCaesar/p/10549519.html