题解:CF2109B Slice to Survive

题目传送门1

题目传送门2

思路

要让 MoufFouad 全按最优方案来写,那么可以分为两类:

  • 先割行,再割列,答案就是 \(\log_2 n + \log_2 \min (m-b+1,b)\)

  • 先割列,再割行,答案就是 \(\log_2 m + \log_2 \min (n-a+1,a)\)

最后取最小值 \(+1\) 就好了。

为什么要 \(+1\) 呢,因为第一轮还没算呢。

具体细节看代码。

:::info[code]{open}

#include <bits/stdc++.h> 
using namespace std;
int T;
int n,m,a,b;
int main() {
	cin>>T;
	while (T--){
    	cin>>n>>m>>a>>b;
    	int ans1=ceil(log2(m))+ceil(log2(min(n-a+1,a)));// 先割行,再割列
        int ans2=ceil(log2(n))+ceil(log2(min(m-b+1,b)));// 先割列,再割行
    	cout<<min(ans1,ans2)+1<<endl;// 最小值+1
    }
    return 0;
}

posted @ 2026-05-24 13:36  Synthx  阅读(3)  评论(0)    收藏  举报