Google KickStart 2020 RoundB D题
时间:2020-04-20
本文章向大家介绍Google KickStart 2020 RoundB D题,主要包括Google KickStart 2020 RoundB D题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题意:有一个W列H行的竞技场,机器人要从(1,1)走到(W,H)。竞技场中有一个左上坐标(L,U),右下坐标(R,D)的矩形黑洞。
机器人只能向右走或向下走,概率各为1/2。如果机器人在最后一行,则只能往右走;如果机器人在最后一列,则只能往下走。
问机器人不掉进黑洞成功到达(W,H)的概率。
分析:机器人要么从黑洞左下方绕过去,要么从黑洞右上方绕过去。
注意:由于“如果机器人在最后一行,则只能往右走;如果机器人在最后一列,则只能往下走”,因此最后一行和最后一列的概率一定要单独算!
#include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #include<string> #include<iostream> #include<set> #include<map> #include<stack> #include<queue> #include<vector> #include<sstream> typedef long long LL; const int INF = 0x3f3f3f3f; using namespace std; const int MAXN = 200000 + 10; const double eps = 1e-8; int dcmp(double a, double b){ if(fabs(a - b) < eps) return 0; return a < b ? -1 : 1; } double Log2[MAXN], last_r[MAXN], last_c[MAXN]; int W, H, L, U, R, D; void init_log2(){ Log2[0] = 0; for(int i = 1; i < MAXN; ++i){ Log2[i] = Log2[i - 1] + log2(i); } } void init_last(){ last_r[1] = pow(2, Log2[1 + H - 2] - Log2[1 - 1] - Log2[H - 1] - (double)(1 + H - 2)); for(int i = 2; i <= W; ++i){ last_r[i] = last_r[i - 1] + 0.5 * pow(2, Log2[i + (H - 1) - 2] - Log2[i - 1] - Log2[(H - 1) - 1] - (double)(i + (H - 1) - 2)); } last_c[1] = pow(2, Log2[W + 1 - 2] - Log2[W - 1] - Log2[1 - 1] - (double)(W + 1 - 2)); for(int i = 2; i <= H; ++i){ last_c[i] = last_c[i - 1] + 0.5 * pow(2, Log2[(W - 1) + i - 2] - Log2[(W - 1) - 1] - Log2[i - 1] - (double)((W - 1) + i - 2)); } } bool judge(int x, int y){ return x >= 1 && x <= W && y >= 1 && y <= H; } int main(){ init_log2(); int T; scanf("%d", &T); for(int Case = 1; Case <= T; ++Case){ scanf("%d%d%d%d%d%d", &W, &H, &L, &U, &R, &D); init_last(); int x = L - 1; int y = D + 1; double ans = 0; while(judge(x, y)){ if(y == H){ ans += last_r[x]; } else{ ans += pow(2, Log2[x + y - 2] - Log2[x - 1] - Log2[y - 1] - (double)(x + y - 2)); } --x; ++y; } x = R + 1; y = U - 1; while(judge(x, y)){ if(x == W){ ans += last_c[y]; } else{ ans += pow(2, Log2[x + y - 2] - Log2[x - 1] - Log2[y - 1] - (double)(x + y - 2)); } ++x; --y; } printf("Case #%d: %.8lf\n", Case, ans); } return 0; }
原文地址:https://www.cnblogs.com/tyty-Somnuspoppy/p/12737033.html
- CentOS7搭建ELK日志集中分析平台
- Centos安装sshfs实现挂载目录
- shell脚本监控磁盘使用率
- Python使用MD5加密字符串
- Spark MLlib之 KMeans聚类算法详解
- Python时间与时间戳转换
- linux配置ssh互信实现免密登陆
- uva--1339 - Ancient Cipher(模拟水体系列)
- Python获得13位unix时间戳
- Centos7下LVM对文件系统进行在线扩容
- centos7编译安装Redis
- hdu----(5023)A Corrupt Mayor's Performance Art(线段树区间更新以及区间查询)
- Redis单线程架构
- hdu----(4521)小明系列问题——小明序列
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【Rust日报】2020-07-28 SO:在命令行下浏览StackOverflow
- 【翻译】200行代码讲透RUST FUTURES (6)
- MPU6050姿态解算方式1-DMP
- 打卡群刷题总结0729——分隔链表
- 单细胞tSNE细胞降维图还可以这样做?!
- 从IIC实测波形入手,搞懂IIC通信
- FreeRTOS例程4-串口DMA收发不定长数据
- FreeRTOS例程3-串口中断接收不定长的数据与二值信号量的使用
- 前端如何将json数据导出为excel文件
- 使用Postman访问腾讯云API3.0
- C语言将float拆分为4个hex传输与重组
- C语言字符串相关函数使用示例 strtok_r strstr strtok atoi
- FreeRTOS例程1-基础任务创建
- ARouter路由记录
- java的DES和3DES加解密算法