好友
阅读权限10
听众
最后登录1970-1-1
|
德古拉伯
发表于 2019-4-21 13:47
新人第一次发帖,如有违规,请管理员删帖。
最近楼主在全国青少年信息学奥林匹克联赛练习上刷到了一道奥数题(铺地毯),以下为原题:
题目描述为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有 nn 张地毯,编号从 11 到nn。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。输入输出格式输入格式:
输入共n+2n+2行第一行,一个整数nn,表示总共有nn张地毯接下来的nn行中,第 i+1i+1行表示编号ii的地毯的信息,包含四个正整数a ,b ,g ,ka,b,g,k ,每两个整数之间用一个空格隔开,分别表示铺设地毯的左下角的坐标(a,b)(a,b)以及地毯在xx轴和yy轴方向的长度第n+2n+2行包含两个正整数xx和yy,表示所求的地面的点的坐标(x,y)(x,y)输出格式:
输出共11行,一个整数,表示所求的地毯的编号;若此处没有被地毯覆盖则输出-1−1输入输出样例输入样例#1: 复制
31 0 2 30 2 3 32 1 3 32 2输出样例#1: 复制
3 输入样例#2: 复制
31 0 2 30 2 3 32 1 3 34 5输出样例#2: 复制
-1说明【样例解释1】如下图,11 号地毯用实线表示,22 号地毯用虚线表示,33 号用双实线表示,覆盖点(2,2)(2,2)的最上面一张地毯是 33 号地毯。 【数据范围】对于30% 的数据,有 n ≤2n≤2 ;
对于50% 的数据,0 ≤a, b, g, k≤1000≤a,b,g,k≤100;
对于100%的数据,有 0 ≤n≤10,0000≤n≤10,000 ,0≤a, b, g, k ≤100,0000≤a,b,g,k≤100,000。noip2011提高组day1第1题
以下为楼主自己的想法:
import java.util.*;
public class Main {
public static void main(String[]args) {
// 定义一个二维数组
int square[][]=new int [4][4];
int n,x,y;
int sum=0;
Scanner scanner=new Scanner(System.in);
System.out.println("请输入一个整数:");
n=scanner.nextInt();
// 为二维数组赋值
for(int i=0;i<n;i++)
{
square[0]=scanner.nextInt();
square[1]=scanner.nextInt();
square[2]=scanner.nextInt();
square[3]=scanner.nextInt();
}
// 需要查找坐标的值
x=scanner.nextInt();
y=scanner.nextInt();
// 判断x,y坐标是否在地毯上,若存在则输出覆盖地毯最上面的一张
for(int i=0;i<n;i++)
{
if(x>=square[0] &&x<=square[2]+square[0] &&y>=square[1] && y<=square[3]+square[1])
{sum=i+1;}
// 否则返回-1
else {
sum=-1;
}
}
// 输出
System.out.println(sum);
}
}总结:其实这道题很简单,只要理解了题意,做起来还是很简单的。
免费评分,爱心(你们懂的) |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|