炮台实验

蒜头君在玩一个战争模拟游戏,他有高度为 1,2,3,... ,n的炮台各一个,他需要把这 n个炮台从左往右排成一行,并且炮口都朝向右边。

在这个游戏中,所有炮台发射的炮弹会摧毁前方所有高度比自己低的炮台。每当蒜头君把 n个炮台排成一行后,可能会有一些炮台被摧毁。举个例子:当前有 5 个炮台,从左到右高度分别为 2,1,3,5,4往右发射炮弹后,高度为 4 的炮台被高度为 5 的摧毁,高度为 1 的炮台被高度为 2 的炮台摧毁,最后只会剩下 2,3,5 这三个炮台。

现在蒜头君想知道,如果随机地摆放这 n个炮台,最后剩下炮台个数的期望是多少?比如 n=时,有两种摆放方式,高度序列分别为 1,2和 2,1,前者最后剩下 22 个炮台,后者最后剩下一个炮台,因此期望为 (2+1)\2=1.5000。

请你求出 n=201时剩下炮台个数的期望,保留四位小数。

样例输入复制

样例输出复制

题目来源

2019 蓝桥杯省赛 A 组模拟赛(一)

思路一(运行时间过长,失败):

创建一个数组arr[2019]之后分别赋值为1,2,3.....2019。随后用next_permutation()函数把所有的排列情况都输入一遍,之后用循环把后面小于前面的数都去掉变可以了。

代码如下:

#include <iostream>
#include <algorithm>
#include<string>
#include<cstring>
#include<cstdio>
using namespace std;
#define N 9
int main()
{
int arr[];
for (int i = ;i < N;++i)
{
arr[i] = i+;
}
double num1 = , num2 = ;
do {
bool b[] = { };
num2++;
for (int i = ;i < N;++i)
{
for (int j = i + ;j < N;++j)
{
if (arr[i] > arr[j]) b[j] = ;
}
}
for (int i = ;i < N;++i)
{
if (!b[i]) num1++;
}
} while (next_permutation(arr, arr + N));
printf("%.4f", num1/num2 );
return ;
}

运行发现之后,想法很好,但是由于循环次数很大,编译器需要大量时间,也就能算n=20左右的情况,这离2019还差很多,所以这个思路就得换了,于是产生了第二个思路。

思路二:

因为题中是求期望值,比如2019这个数,无论怎么排列2019这个数都是存在的,所以2019这个数期望值是1;2018这个数只有2019在他前面时候才能消灭它,所以2018这个数的期望值就是1/2;同理,n=2019时,只用一个循环1/i就可以解决了。

代码如下:

#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
double num = ;
int n = ;
for (int i = ; i <= n; i++) {
num += 1.0 / i;
}
printf("%.4f\n", num);
return ;
}

C++炮台实验的更多相关文章

  1. [原] 利用 OVS 建立 VxLAN 虚拟网络实验

    OVS 配置 VxLAN HOST A ------------------------------------------ | zh-veth0(10.1.1.1) VM A | | ---|--- ...

  2. Android中Activity的四大启动模式实验简述

    作为Android四大组件之一,Activity可以说是最基本也是最常见的组件,它提供了一个显示界面,从而实现与用户的交互,作为初学者,必须熟练掌握.今天我们就来通过实验演示,来帮助大家理解Activ ...

  3. SEED实验系列文章目录

    美国雪城大学SEEDLabs实验列表 SEEDLabs是一套完整的信息安全实验,涵盖本科信息安全教学中的大部分基本原理.项目组2002年由杜文亮教授创建,目前开发了30个实验,几百所大学已采用.实验楼 ...

  4. 物联网实验4 alljoyn物联网实验之手机局域网控制设备

    AllJoyn开源物联网协议框架,官方描述是一个能够使连接设备之间进行互操作的通用软件框架和系统服务核心集,也是一个跨制造商来创建动态近端网络的软件应用.高通已经将该项目捐赠给了一个名为“AllSee ...

  5. (转)linux下和云端通讯的例程, ubuntu和openwrt实验成功(一)

    一.  HTTP请求的数据流总结#上传数据, yeelink的数据流如下POST /v1.0/device/4420/sensor/9089/datapoints HTTP/1.1Host: api. ...

  6. (原创) alljoyn物联网实验之手机局域网控制设备

    AllJoyn开源物联网协议框架,官方描述是一个能够使连接设备之间进行互操作的通用软件框架和系统服务核心集,也是一个跨制造商来创建动态近端网络的软件应用.高通已经将该项目捐赠给了一个名为“AllSee ...

  7. 实验:Oracle直接拷贝物理存储文件迁移

    实验目的:Oracle直接拷贝物理文件迁移,生产库有类似施工需求,故在实验环境简单验证一下. 实验环境: A主机:192.168.1.200 Solaris10 + Oracle 11.2.0.1 B ...

  8. Oracle RAC 更换存储实验

    实验环境准备: RHEL 6.5 + Oracle 11.2.0.4 RAC (2nodes) OCR和Voting Disk使用的是OCR1磁盘组,底层对应3个1G大小的共享LUN,一般冗余: DA ...

  9. Vertica集群扩容实验过程记录

    需求: 将3个节点的Vertica集群扩容,额外增加3个节点,即扩展到6个节点的Vertica集群. 实验环境: RHEL 6.5 + Vertica 7.2.2-2 步骤: 1.三节点Vertica ...

随机推荐

  1. linux日志朔源分析记录

    lastlog 记录用户最后一次登录情况 只有root最近登录过 lastlog -u 用户名或者uid uid 直接在passwd文件中的低三位可以看到 lastb 记录用户用户登录失败的用户记录, ...

  2. Shell变量的作用域:Shell全局变量、环境变量和局部变量

    Shell 变量的作用域(Scope),就是 Shell 变量的有效范围(可以使用的范围). 在不同的作用域中,同名的变量不会相互干涉,就好像 A 班有个叫小明的同学,B 班也有个叫小明的同学,虽然他 ...

  3. Myeclipse-10.7.1版本破解

    自从上次写了IDEA2020版本破解方式,这次写一下Myeclipse10.7.1版本破解 下方链接是IDEA破解教程 点击即可跳转 Myeclipse下载地址这里我上传到了百度网盘    这里提取码 ...

  4. 火车进栈(进出栈的模拟,dfs爆搜)

    这里有n列火车将要进站再出站,但是,每列火车只有1节,那就是车头. 这n列火车按1到n的顺序从东方左转进站,这个车站是南北方向的,它虽然无限长,只可惜是一个死胡同,而且站台只有一条股道,火车只能倒着从 ...

  5. 老男孩Django笔记(非原创)

    .WEB框架 MVC Model View Controller 数据库 模板文件 业务处理 MTV Model Template View 数据库 模板文件 业务处理 ############## ...

  6. Upload 上传 el-upload 上传配置请求头为Content-Type: "multipart/form-data"

    api接口处添加属性 (标红处) // 校验台账 export const checkEquiment = (data) => { return axios({ url: '/job/equip ...

  7. Centos xrdp 远程连接后突然闪退

    问题描述: 可以进入登录页面,但是输入用户名,密码后,直接闪退. 查看 该用户名  ~/.xsession-errors imsettings-check: ): IMSettings-WARNING ...

  8. boost之signal的使用

    文章目录 简介 代码 模板实现: 测试代码 运行结果 简介 boost是C++的一个扩展库,被称为C++准标准库,里面的组件很丰富,并且引用方便,85%的组件只需要引用头文件即可使用. 并且在嵌入式系 ...

  9. 一文搞懂Linux系统开发

    先列一下Linux系统开发要掌握的知识,以后有时间再一一介绍. 欢迎关注我的微信公众号:fensnote 文章目录 Linux系统开发会用到什么? C语言基础 shell脚本 学会使用Makefile ...

  10. Html视频播放同时获取当前帧下的图片

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...