题解:B4210 [常州市赛 2022] 最早对决
joshua0729 · · 题解
更好的阅读体验
思路
本题的情况大致分为两种:
- 有人不是种子选手
- 都是种子选手
有人不是种子选手的情况比较简单,因为都是随机抽签,所以最小的相遇的可能性就是 1。
否则需要计算两人的批次后计算最小相遇轮数。步骤:
- 确定批次。批次为满足条件
2^{l-1}<x\le 2^l 的最小l 。 - 最小相遇轮数为
8-\max(a,b)+1 。其中a,b 为两人的批次。
最后直接输出即可。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
int s,t;
cin>>s>>t;
if(s>t) swap(s,t);
int a,b;
a=0;
while((1<<a)<s) a++;
a++;
b=0;
while((1<<b)<t) b++;
b++;
if(s<=32&&t<=32){
cout<<8-max(a,b)+1<<endl;
}
else{
cout<<1<<endl;
}
return 0;
}
时间复杂度:
AC 记录