洛谷 #1654. OSU!

题意

为什么不能叫UNO
每个状态为0/1,问连续1的长度的立方和的期望值

题解

期望Dp,维护1维、2维、3维期望值

调试记录

3维要算上为0的期望
#include <cstdio>
#define maxn 100005

using namespace std;

double cnt[4][maxn], chance[maxn];
int n;

int main(){
	scanf("%d", &n);
	
	for (int i = 1; i <= n; i++) scanf("%lf", &chance[i]);
	
	for (int i = 1; i <= n; i++){
		cnt[1][i] = (cnt[1][i - 1] + 1) * chance[i];
		cnt[2][i] = (cnt[2][i - 1] + 2 * cnt[1][i - 1] + 1) * chance[i];
		cnt[3][i] = (cnt[3][i - 1] + 3 * cnt[2][i - 1] + 3 * cnt[1][i - 1] + 1) * chance[i] + (1 - chance[i]) * cnt[3][i - 1];
	}
	printf("%.1lf\n", cnt[3][n]);
	
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我们来一一解决你的问题。 首先是第 0 个问题,我们可以使用 `os.mkdir()` 函数来创建一个文件夹,如下所示: ```python import os # 获取当前工作目录 cwd = os.getcwd() # 定义文件夹名称 folder_name = "学号_姓名" # 创建文件夹 os.mkdir(os.path.join(cwd, folder_name)) ``` 其中,`os.path.join()` 函数可以将多个路径拼接成一个完整的路径。 接下来是第 1 个问题,我们需要在 “学号_姓名” 文件夹下创建五个子文件夹,同样使用 `os.mkdir()` 函数: ```python # 创建五个子文件夹 sub_folders = ["1_诗词", "2_图片", "3_视频", "4_备份", "5_其它"] for sub_folder in sub_folders: os.mkdir(os.path.join(cwd, folder_name, sub_folder)) ``` 第 2 个问题需要在上面 “学号_姓名” 文件夹中创建 100 个子文件夹,我们可以使用循环来实现: ```python # 创建 100 个子文件夹 for i in range(100): sub_folder_name = "{:03d}".format(i) os.mkdir(os.path.join(cwd, folder_name, sub_folder_name)) ``` 第 3 个问题需要删除前 50 个子文件夹,可以使用 `os.removedirs()` 函数来删除文件夹: ```python # 删除前 50 个子文件夹 for i in range(50): sub_folder_name = "{:03d}".format(i) os.removedirs(os.path.join(cwd, folder_name, sub_folder_name)) ``` 注意,这里使用的是 `os.removedirs()` 函数,该函数可以删除含有多层子文件夹的文件夹。 第 4 个问题需要将 “5_其它” 更名为 “5_myblcu”,可以使用 `os.rename()` 函数来重命名文件夹: ```python # 将 "5_其它" 更名为 "5_myblcu" old_folder_name = "5_其它" new_folder_name = "5_myblcu" os.rename(os.path.join(cwd, folder_name, old_folder_name), os.path.join(cwd, folder_name, new_folder_name)) ``` 好的,以上是前四个问题的解决方案,接下来我们来解决第 5 个问题。 需要在当前工作目录中创建多级目录,我们可以使用 `os.makedirs()` 函数来创建多级目录: ```python # 创建多级目录 chapters = ["第1章", "第2章", "第3章", "第4章", "第5章", "第6章", "第7章", "第8章"] for chapter in chapters: os.makedirs(os.path.join(cwd, folder_name, "python", chapter)) ``` 第 6 个问题需要将 “5_myblcu” 中所有文件和文件夹压缩为 “blcu.zip” 文件,并保存在 “5_myblcu/zip/” 中。我们可以使用 `shutil.make_archive()` 函数来实现: ```python import shutil # 压缩 "5_myblcu" 文件夹到 "5_myblcu/zip/" 中 shutil.make_archive(os.path.join(cwd, folder_name, "5_myblcu/zip/blcu"), "zip", os.path.join(cwd, folder_name, "5_myblcu")) ``` 第 7 个问题需要将 “学号_姓名” 文件夹中前 50 个文件夹移动到 “4_备份” 文件夹中,可以使用 `shutil.move()` 函数来移动文件夹: ```python # 将前 50 个文件夹移动到 "4_备份" 文件夹中 for i in range(50): sub_folder_name = "{:03d}".format(i) shutil.move(os.path.join(cwd, folder_name, sub_folder_name), os.path.join(cwd, folder_name, "4_备份")) ``` 最后一个问题需要将 “4_备份” 文件夹复制到 “5_myblcu” 中,可以使用 `shutil.copytree()` 函数来复制文件夹: ```python # 将 "4_备份" 文件夹复制到 "5_myblcu" 中 shutil.copytree(os.path.join(cwd, folder_name, "4_备份"), os.path.join(cwd, folder_name, "5_myblcu/备份")) ``` 这样,所有问题的解决方案就完成了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值