日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java练习 SDUT-2401最大矩形面积

發(fā)布時(shí)間:2025/3/19 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java练习 SDUT-2401最大矩形面积 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最大矩形面積

Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description

在一個(gè)矩形區(qū)域內(nèi)有很多點(diǎn),每個(gè)點(diǎn)的坐標(biāo)都是整數(shù)。求一個(gè)矩形,使之內(nèi)部沒(méi)有點(diǎn),且面積最大。所求矩形的邊與坐標(biāo)軸平行。

Input

一個(gè)整數(shù)t,表示測(cè)試組數(shù)。
整數(shù)l,w表示矩形橫向邊長(zhǎng)和豎向邊長(zhǎng)。
一個(gè)整數(shù)n,表示該矩形內(nèi)點(diǎn)的個(gè)數(shù)。
n個(gè)點(diǎn)的坐標(biāo)x,y。

Output

最大面積。

Sample Input

2
2 3
0
10 10
4
1 1
9 1
1 9
9 9

Sample Output

6
80

題解:這道題是一道偏向思維的題目,先讓點(diǎn)從左往右跑一邊然后從上往下跑一邊找出最大的矩形面積。注意邊界的更新,需要讓這個(gè)點(diǎn)再邊界內(nèi)部,一開(kāi)始 我想的是根據(jù)面積最小的損失來(lái)更新這個(gè)點(diǎn),結(jié)果后來(lái)意識(shí)到,比如一個(gè)點(diǎn)的x坐標(biāo)7,此時(shí)的左右邊界的值跟新為(0,6),這個(gè)點(diǎn)就不再范圍內(nèi)了,這樣就導(dǎo)致該點(diǎn)不再所求的矩形的邊上,然而循環(huán)求的意義在于求與這個(gè)點(diǎn)有關(guān)的矩形的面積(點(diǎn)在矩形邊上)。

import java.util.*;public class Main {public static void main(String []args){Scanner cin = new Scanner(System.in);int t,i,lr,ud;node a = new node();t = cin.nextInt();while(t-->0){a.l = cin.nextInt();a.w = cin.nextInt();a.n = cin.nextInt();a.INIT();//System.out.println(a.n);for(i=2;i<a.n;i++){a.s[i].x = cin.nextInt();a.s[i].y = cin.nextInt();}lr = a.get_lr();ud = a.get_ud();System.out.println(Math.max(lr, ud));}cin.close();} }class point {int x,y; } /*具體的解題代碼*/ class node {int l,w,n;point s[] = new point[1050];/*初始化,讓邊界成為一個(gè)點(diǎn)(最大的矩形面積)*/void INIT(){int i;n = n + 2;for(i=0;i<n;i++)s[i] = new point();s[0].x = 0;s[0].y = 0;s[1].x = l;s[1].y = w;}/*根據(jù)x的大小對(duì)點(diǎn)進(jìn)行排序*/void sortlr(){int i,j;point t = new point();for(i=0;i<n;i++){for(j=0;j<n-i-1;j++){if(s[j].x>s[j+1].x){t = s[j];s[j] = s[j+1];s[j+1] = t;}else if(s[j].x==s[j+1].x){if(s[j].y>s[j+1].y){t = s[j];s[j] = s[j+1];s[j+1] = t;}}}}}/*根據(jù)y的大小對(duì)點(diǎn)進(jìn)行排序*/void sortud(){int i,j;point t = new point();for(i=0;i<n;i++){for(j=0;j<n-i-1;j++){if(s[j].y>s[j+1].y){t = s[j];s[j] = s[j+1];s[j+1] = t;}else if(s[j].y==s[j+1].y){if(s[j].x>s[j+1].x){t = s[j];s[j] = s[j+1];s[j+1] = t;}}}}}/*從左往右尋找最大的矩形面積*/int get_lr(){int ans = 0,i,j,du,dd;sortlr();for(i=0;i<n-1;i++){du = w;dd = 0;for(j=i+1;j<n;j++){if(s[i].x!=s[j].x){ans = Math.max(ans, (s[j].x-s[i].x)*(du-dd));/*更新上下邊界,注意讓此時(shí)的點(diǎn)在邊界范圍內(nèi)(即該點(diǎn)在矩形的邊上)*/if(s[j].y>s[i].y)du = Math.min(du, s[j].y);elsedd = Math.max(dd,s[j].y);}}}return ans;}/*從下往上找最大的矩形面積*/int get_ud(){int ans = 0,i,j,dl,dr;sortud();for(i=0;i<n-1;i++){dl = 0;dr = l;for(j=i+1;j<n;j++){if(s[i].y!=s[j].y){ans = Math.max(ans, (s[j].y-s[i].y)*(dr-dl));/*更新上下邊界*/if(s[j].x>s[i].x)dr = Math.min(dr, s[j].x);elsedl = Math.max(dl, s[j].x);}}}return ans;} }

轉(zhuǎn)載于:https://www.cnblogs.com/luoxiaoyi/p/9870238.html

總結(jié)

以上是生活随笔為你收集整理的Java练习 SDUT-2401最大矩形面积的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。