洛谷P1369 矩形

2022-05-08 02:33:08 字數 1331 閱讀 1656

題目描述

給出平面上的n個點,請找出乙個邊與座標軸平行的矩形,使得它的邊界上有盡量多的點

輸入輸出格式

輸入格式:

第一行乙個整數n,為平面內點的個數。

第2~n+1行每行兩個整數,為點的橫、縱座標。

輸出格式:

只有乙個數,為所取矩形邊界上能包含盡量多的點的個數。

輸入輸出樣例

輸入樣例#1:

10 2 3

9 2

7 4

3 4

5 7

1 5

10 4

10 6

11 4

4 6

輸出樣例#1:

7 說明

【資料範圍】

對於40%的資料,n<=30

對於100%的資料,n<=300,各點的橫、縱座標在1~100範圍內

此題應該是一道略有思維難度的題,涉及到數學邏輯思維的運用,對矩形的構造需要一定的想象能力。

要點:1、列舉兩個點,把他們作為矩形上兩個相對的頂點,構建矩形;

2、特判所有點在一條直線上的情況,此時輸出點的個數;

3、在兩個點外另找乙個點,分作矩形邊界點和矩形內部點兩種情況,記下此時矩形邊上點的個數、矩形內部點的個數、矩形內部加邊上點的個數,最後比較出最大值即可。

#include

#include

#include

#include

#include

#include

using

namespace

std;

struct dd

a[310];

int on[110],in[110],l[110],num[110],i,j,k,n,ans=0;

int main()

if(x1||y1)//所有點橫座標或縱座標全相同的情況

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

if(a[i].y>=a[j].y)//保證a[i].ycontinue;

else

if(a[k].y>a[i].y&&a[k].y//a[k].y在a[i].y與a[j].y之間時

}l[1]=0;

for(k=2;k<=100;k++)

l[k]=l[k-1]+num[k-1];//當a[k]作為邊上點時矩形內點的個數

int max0=on[1]-l[1];

for(k=2;k<=100;k++)//當a[k]作為矩形中間點時矩形內點的個數

}cout

0;}

洛谷P1191 矩形

給出乙個n n的矩陣,矩陣中,有些格仔被染成白色,有些格仔被染成黑色,現要求矩陣中白色矩形的數量 輸入格式 第一行,乙個整數n,表示矩形的大小。接下來n行,每行n個字元,這些字元為 w 或 b 其中 w 表示白格,b 表示黑格。輸出格式 乙個正整數,為白色矩形數量 輸入樣例 1 4 wwbw bbw...

洛谷P1191 矩形

給出乙個n nn times nn n的矩陣,矩陣中,有些格仔被染成白色,有些格仔被染成黑色,現要求矩陣中白色矩形的數量 輸入格式 第一行,乙個整數nnn,表示矩形的大小。接下來nnn行,每行nnn個字元,這些字元為 www 或 bbb 其中 www 表示白格,bbb 表示黑格。輸出格式 乙個正整數...

洛谷P1034矩形覆蓋

據說是dp,所以我用dfs,居然a了,資料真水 說說思路,我們要求覆蓋所有點且不能重疊,顯然我們要從點入手,我們可以列舉每個點被哪個矩形重疊,因為如果列舉矩形覆蓋點的話,貌似不可做,具體怎麼實現呢?最好小夥伴們手動畫個圖,一下就明白了,列舉每個點被哪個矩形覆蓋,那麼必然是要根據點的座標來調整矩形的位...