刷题时看某博主题解发现了不理解的地方 已经把他代码写到本地了。
#include
using namespace std;
int main()
{
int n,a[10001],b[10001],g[10001],k[10001],x,y;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i]>>b[i];
cin>>g[i]>>k[i];
}
cin>>x>>y;
for(int i=n;i>=1;i--)
{
if((x>=a[i]&&x<=a[i]+g[i])&&(y>=b[i]&&y<=b[i]+k[i]))
{
cout<
不理解的地方在于15行,这行if语句是确定x与y范围是吧,为什么要这么判定,好迷。
本地测试全对了,而且其他博主也是这么写的,这篇相对最清楚了。
本题链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1118
希望得到回复吧。
这挺好理解的呀,只要你知道算术运算比逻辑运算优先
x>=a[i]&&x<=a[i]+g[i] //a[i]表示左下角x坐标,a[i]+g[i]表示地毯矩形长度
y>=b[i]&&y<=b[i]+k[i] //宽度
所有点的集合形成一个矩形,该表达式就是表示(x,y)是否在给定的矩形坐标范围内,也就是地毯坐标
n是从最大开始遍历,也就是最上方一张地毯坐标