您的位置:首页 > 其它

普及练习场 简单的模拟 铺地毯

2017-12-10 19:17 316 查看
题目链接

题意理解

这题的话,不能直接去模拟,因为按照地板来模拟,会炸空间,说不定时间也会炸。

所以需要在得到了x,y之后,去找(x,y)坐标上的最上面一块地毯。

然后我之后可能会有很长一段时间拿Java写代码。我很想吐槽的是,Java的时间和空间确实不够优秀,至少和C++ 比起来。

然后回归正题,这题可以优化的,只要从后面开始找就好了,一找到就退出,找不到就是-1。

代码

import java.util.Scanner;

public class Main {

private static class Carpet {
int a;
int b;
int g;
int k;
public Carpet(int a, int b, int g, int k) {
this.a = a;
this.b = b;
this.g = g;
this.k = k;
}
}
static int n;
static int a, b, g, k;
static int x, y;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
Carpet[] carpet = new Carpet
;
for(int i = 0; i < n; i++) {
a = scanner.nextInt();
b = scanner.nextInt();
g = scanner.nextInt();
k = scanner.nextInt();
carpet[i] = new Carpet(a, b, g, k);
}
x = scanner.nextInt();
y = scanner.nextInt();
int top = -1;
for(int i = 0; i < n; i++) {
if(carpet[i].a <= x && x <= carpet[i].a + carpet[i].g) {
if(carpet[i].b <= y && y <= carpet[i].b + carpet[i].k) {
top = i + 1;
}
}
}
scanner.close();
System.out.println(top);
}
}


—————————————————C++分割线—————————————–

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
using namespace std;
int n,x,y;
struct node
{
int x,y,xl,yl;
}t[10010];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d%d%d%d",&t[i].x,&t[i].y,&t[i].xl,&t[i].yl);
scanf("%d%d",&x,&y);
for(int i=n;i>=1;i--)
{
if(x>=t[i].x && x<=t[i].x+t[i].xl && y>=t[i].y && y<=t[i].y+t[i].yl)
{
printf("%d",i);
return 0;
}
}
printf("-1");
return 0;
}


这里的cpp代码不是我写的,是我直接看的别人的代码,如有侵权,告知后立即删除

欢迎加入“不会算法一群菜鸟”,群号是⑥⑥①⑨②2025,这是我设置的一道很低的门槛用来阻止广告的。入群的验证暗号是:我爱编译原理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: