社区讨论

谁能帮忙修修这篇题解

灌水区参与者 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 条回复,欢迎继续交流。

正在加载回复...