社区讨论
谁能帮忙修修这篇题解
灌水区参与者 6已保存回复 17
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 17 条
- 当前快照
- 1 份
- 快照标识符
- @lo1m1jzf
- 此快照首次捕获于
- 2023/10/22 23:15 2 年前
- 此快照最后确认于
- 2023/11/02 23:59 2 年前
CPP
## 题意
通过题目告诉我们的,每 $a$ 小时细胞数量乘以 $2$ ,每 $b$ 小时细胞数量除以 $2$ ,但无论如何,细胞数量的最小值恒为1,问 $k$ 小时后还有几个细胞数量并对 $998244353$ 取模。
## 过程
其实不难发现,细胞的数量永远为 $2^n$ ,所以一般情况下,细胞的数量为 $2^$ $\left (\left\lfloor\frac{a}{k}\right\rfloor - \left\lfloor\frac{b}{k}\right\rfloor\right )$,特殊的,当$\left (\left\lfloor\frac{a}{k}\right\rfloor - \left\lfloor\frac{b}{k}\right\rfloor\right ) \le 0$时,我们需要特殊判断一下,如果最后一次乘 $2$ 操作能够在结束之前发生同时不会受到除 $2$ 操作的影响,那么就输出2,否则输出1。
## code
```cpp
#include <iostream>
using namespace std;
#define int long long
int a,b,k,ans=1,qwq=998244353;
signed main(){
cin>>a>>b>>k;
int tmpa=a,tmpb=b;
a=k/a;
b=k/b;
a-=b;
if(a<=0){
if(k%tmpa<k%tmpb)
cout<<2;//最后一次乘2$操作能够在结束之前发生时不会受到除2$操作的影响
else
cout<<1;//受到影响
return 0;
}
else{
for(int i=1;i<=a;i++){
ans*=2;
ans%=qwq;
}
cout<<ans;
}
return 0;
}
CPP回复
共 17 条回复,欢迎继续交流。
正在加载回复...