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