题解:CF2109B Slice to Survive
思路
要让 Mouf 和 Fouad 全按最优方案来写,那么可以分为两类:
-
先割行,再割列,答案就是 \(\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;
}

浙公网安备 33010602011771号