NOIP校內模擬 矩陣分組 matrix

2022-05-04 09:21:08 字數 872 閱讀 4463

很容易想到二分。

我們二分什麼呢?二分極值

首先,a,b兩部分一定是逐行長度遞增(遞減)的圖形,才能滿足最多拐一次彎到達,而且a,b可以互換

其次,最大值和最小值肯定不能在乙個區域裡,這樣得出的答案肯定不是最優的,我們可以根據這個性質,找到check的方法

假設最大值在a這一部分,a覆蓋了左上角,我們現在要先構造這麼乙個a,再來檢驗剩下b是否合法。

那麼對於每一行,我們往右掃,直到找到乙個x1 使得最大值x1>mid

那麼對於剩下的b,如果有乙個x1-最小值》mid,肯定不合法。

最後,a是可以在任意乙個角的,這就需要將矩陣翻轉,**實現很簡單。

#include#define n 2005

#define max 1000000005

using namespace std;

int n,m,maxv,minv=max;

int matrix[4][n][n]; //0 90 180 270

void init()

x0++;y0=1;

x1=1;y1--;

x2--;y2=m;

x3=m;y3++; }}

int end[n];

bool bigcheck(int state,int d)

end[i]=j-1; }

//檢驗包含最小值的區域

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

}} if(state&1) swap(n,m);

return true;

}bool check(int d)

void solve()

cout<}int main()

NOIP校內模擬 塔

我們可以這樣考慮 x 必定是由若干個立方數拼起來的 因此我們可以逆著求 只需關心每次取哪個立方數即可 設a是最大的 a 使得 a 3 不超過 m 分析樣例 我們發現在第一次的時候 就可以取a或者a 1 那第一次取a 2 a 3.行不行呢?1.用 a,剩下m a 3 2.用 a 1,x 最大為 a 3...

NOIP校內模擬 航班

描述 l因為業務繁忙,經常會到處出差。因為他是航空公司的優質客戶,於是某個航空 公司給了他乙個優惠券。他可以利用這個優惠券在任何乙個國家內的任意城市間免費旅行,當他的路線跨國 才會產生費用。l有乙個航空公司的 表與航線。而且每個城市出發都能到所有的城 市,2 個城市間可能有不止乙個航班,乙個國家內的...

NOIP校內模擬 階乘

描述 有n個正整數a i 設它們乘積為p,你可以給p乘上乙個正整數q,使pq剛好為正整數m的階乘,求m的最小值。輸入共兩行。第一行乙個正整數n。第二行n個正整數a i 輸出共一行 乙個正整數m。樣例輸入16 樣例輸出3提示 樣例解釋 當p 6,q 1時,pq 3!資料範圍與約定 對於10 的資料,n...