閒的無聊的簡單題

2021-08-30 19:39:35 字數 1525 閱讀 5013

給你乙個n*m的二維陣列,a[i][j]表示第i行第j列的數字,現在求乙個最大面積(長乘寬)的子矩形,要求對於該子矩形每一行中相鄰的兩個數,a[i][j]和a[i][j+1],存在乙個整數k使得2的k次方同時小於等於a[i][j]和a[i][j+1],並且2的(k+1)次方大於a[i][j]和a[i][j+1],對於每一列中相鄰的兩個數,a[i][j]和a[i+1][j],不存在乙個整數k使得2的k次方同時小於等於a[i][j]和a[i+1][j],並且2的(k+1)次方大於a[i][j]和a[i+1][j]。(0

第一行輸入兩個數n,m

接下來n行,每行m個整數第i行第j列表示a[i][j](0

輸出乙個表示符合要求的最大矩形面積

4 4

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

6

對於樣例,面積為6的矩形如下

2 3

6 7

10 11

題解:判斷乙個數a與另乙個數b是否存在乙個k滿足可以用異或,令c=a^b,如果c同時小於a和b,則存在,否則則不存在。開三個陣列up,l,r存每個點上邊,左邊和右邊可以到達的最值,並且l和r不斷更新,每次不斷更新面積最大值即可。

#include#define fi first

#define se second

#define inf 0x3f3f3f3f

#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)

#define pqueue priority_queue

#define new(a,b) memset(a,b,sizeof(a))

const double pi=4.0*atan(1.0);

const double e=exp(1.0);

const int maxn=1e6+8;

typedef long long ll;

typedef unsigned long long ull;

const ll mod=1e9+7;

const ull base=1e7+7;

using namespace std;

int a[2008][2008];

int l[2008][2008],r[2008][2008],u[2008][2008];

int main()

l[i][1]=1;r[i][m]=m;

int k;

for(int j=2;j<=m;j++)

else

}for(int j=m-1;j>=1;j--)

else}}

int maxa=0;

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

else

maxa=max(maxa,(r[i][j]-l[i][j]+1)*u[i][j]);}}

//cout

無聊的生活,無聊的世界

最近是越來越無聊勒呢,我發現最近的我好像有點神經.神經兮兮的,我承認我以前就愛說,愛瘋,愛鬧,但是八,最近好像比以前還嚴重勒呢.阿,阿,算一算好像好長時間沒出家門勒呢 蛤蛤,自從退學好像越來越頹廢勒,不點阿不點,你完了,你真的完了,誒阿,一天就在家呆著,吃喝拉撒睡玩.這小生活過的,蠻享受的,但是就是...

填數字(簡單題,太無聊了,得水水題)

托公尺發現了一種新的遊戲 填數字 每填寫一次數字 1 i 9 需要花費a i枚金幣,托公尺總共有n枚金幣.托公尺想知道他能得到的最大數字是多少.如果填不了請輸出 1。不需要用完所有金幣 第一行乙個數字n,表示金幣總數.第二行9個正整數,第i個數字表示填寫一次數字i所需要的金幣數.輸出滿足條件的最大數...

無聊的switch題,神奇的小想法

今天上c語言課要求使用switch語句做題 題目很無聊 輸入若干個成績 80為優秀 60 80為通過 60為失敗 更坑爹的是 請用switch語句完成以上問題 乍一看,這是一道純粹的if else題,很不方便用switch,畢竟switch語句不支援這種條件的判斷。老師用了一種很無聊的不想解釋的做法...