【赛后补题】Lucky Probability(CodeForces 110D)
题意
给定两个\(P,Q\)的正整数区间(\(P,Q\)都符合\([L,R]\)这个区间,并且都\(\le 10^9\)),分别从其中随机选出一个数,选出的两个数作为一个新区间的左右端点。要求新区间内的幸运数刚好为\(k\)个的概率(幸运数指一个数的数位只有4或7)。
分析
这题要思考着做。首先能有一个直觉:在\(10^9\)中间的幸运数肯定不多(2^10左右)。这个可以暴力求出。然后概率如何求?所有的情况一定是\((P_r-P_l+1)(Q_r-Q_l+1)\)这么多,然后符合条件的幸运数区间一共有\(l_tot-k+1\)个(\([Lucky_{i},Lucky_{i+k-1}]\))这么多。为了计算所有情况,我们只能遍历所有幸运数区间,看在什么情况下能符合题意(显然不会去遍历\(10^9\)的P、Q的区间)。对于每个这样的\([Lucky_{i},Lucky_{i+k-1}]\)区间,能够与他们相交的P、Q是存在两种情况的:a)P<Q;b) P>Q。我们分类讨论即可。简单地说,先计算Lucky区间与\([P_l,P_r]\)的交集(相当于在a情况下考虑区间头),然后再计算Lucky区间与\([Q_l,Q_r]\)的交集,将两个结果相乘即是符合第i个幸运区间的可能情况。同样地,还要对反向地(即PQ交换)再计算一遍。注意对\(k=1\)情况的特判。
遍历所有的幸运区间后,概率就不难求得了。
代码(Java)
/*
* ACM Code => cf110d.java
* Written by Sam X
* Date: 三月, 08, 2019
* Time: 14:27
*/
import java.util.*;
import java.math.*;
public class cf110d
{
static ArrayList<Long> vec = new ArrayList<>();
static void dfs(long x)
{
if(x>1e9) return;
if(x*10+4<1e9)
{
vec.add(x*10+4);
dfs(x*10+4);
}
if(x*10+7<1e9)
{
vec.add(x*10+7);
dfs(x*10+7);
}
}
static final long contain(long x1, long y1, long x2, long y2)
{
return Math.max(Math.min(y1,y2)-Math.max(x1,x2)+1,0l);
}
public static void main(String args[])
{
Scanner cin = new Scanner(System.in);
long pl = cin.nextLong(),
pr = cin.nextLong(),
vl = cin.nextLong(),
vr = cin.nextLong(),
k = cin.nextLong();
dfs(0);
vec.add(0l);
vec.add((long)1e9);
Collections.sort(vec);
/*
for(long x: vec)
{
System.out.print(x+" ");
}
System.out.println();
*/
long ans=0;
int sz=vec.size()-2;
for(int i=1; i<=sz-k+1; ++i)
{
int j=i+(int)k-1;
ans+=contain(vec.get(i-1)+1, vec.get(i), pl, pr)*contain(vec.get(j), vec.get(j+1)-1, vl, vr);
if(vec.get(i)>pr) break;
}
for(int i=1; i<=sz-k+1; ++i)
{
int j=i+(int)k-1;
ans+=contain(vec.get(i-1)+1, vec.get(i), vl, vr)*contain(vec.get(j), vec.get(j+1)-1, pl, pr);
if(vec.get(i)>vr) break;
}
if(k==1)
{
for(int i=1; i<=sz; ++i)
{
if(contain(vec.get(i), vec.get(i), pl, pr)!=0 &&
contain(vec.get(i), vec.get(i), vl, vr)!=0) ans--;
}
}
System.out.printf("%.12f\n", (double)ans/(vr-vl+1)/(pr-pl+1));
cin.close();
}
}
【赛后补题】Lucky Probability(CodeForces 110D)的更多相关文章
- 2018 HDU多校第四场赛后补题
2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...
- 2018 HDU多校第三场赛后补题
2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...
- 【cf补题记录】Codeforces Round #608 (Div. 2)
比赛传送门 再次改下写博客的格式,以锻炼自己码字能力 A. Suits 题意:有四种材料,第一套西装需要 \(a\).\(d\) 各一件,卖 \(e\) 块:第二套西装需要 \(b\).\(c\).\ ...
- 【cf补题记录】Codeforces Round #607 (Div. 2)
比赛传送门 这里推荐一位dalao的博客-- https://www.cnblogs.com/KisekiPurin2019/ A:字符串 B:贪心 A // https://codeforces.c ...
- 「赛后补题」HBCPC2018题目代码与思路简析
这次比赛(2018年第二届河北省大学生程序设计竞赛)虽然没有打,但是题目还是要写的.未完成的题目(还差比较硬核的四题)和思路分析会陆续更新完. Problem A 2011 Mex Query /* ...
- 【赛后补题】(HDU6223) Infinite Fraction Path {2017-ACM/ICPC Shenyang Onsite}
场上第二条卡我队的题目. 题意与分析 按照题意能够生成一个有环的n个点图(每个点有个位数的权值).图上路过n个点显然能够生成一个n位数的序列.求一个最大序列. 这条题目显然是搜索,但是我队在场上(我负 ...
- 【赛后补题】(HDU6228) Tree {2017-ACM/ICPC Shenyang Onsite}
这条题目当时卡了我们半天,于是成功打铁--今天回来一看,mmp,贪心思想怎么这么弱智.....(怪不得场上那么多人A了 题意分析 这里是原题: Tree Time Limit: 2000/1000 M ...
- HDU 6446 Tree and Permutation(赛后补题)
>>传送门<< 分析:这个题是结束之后和老师他们讨论出来的,很神奇:刚写的时候一直没有注意到这个是一个树这个条件:和老师讨论出来的思路是,任意两个结点出现的次数是(n-1)!, ...
- HZNU第十二届校赛赛后补题
愉快的校赛翻皮水! 题解 A 温暖的签到,注意用gets #include <map> #include <set> #include <ctime> #inclu ...
随机推荐
- SQL Sever——妙用种子列
/****** Script for SelectTopNRows command from SSMS ******/ SELECT TOP 1000 [OFFRCD_STATUS_ID] ,[OFF ...
- November 5th Week 45th Saturday 2016
The longest day has an end. 最难过的日子也会有尽头. No, no, no, I can't see the end of such days, of course, if ...
- angular 生命周期钩子 ngOnInit() 和 ngAfterViewInit() 的区别
angular 生命周期钩子的详细介绍在 https://angular.cn/guide/lifecycle-hooks 文档中做了介绍. ngOnInit() 在 Angular 第一次显示数据 ...
- iptables.md
iptables基本概念 工作流程 1.一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转发出去. 2.如果数据包就是进入本机的,它就会沿着图向下移动,到达I ...
- django用户验证机制
django的验证机制 from django.contrib.auth.decorators import login_required 需要在要验证的界面添加`@login_required` 登 ...
- Mysql安装(win10 64位)
公司的测试数据库只有读的权限,而且还不能用IP和端口去访问,所有很多时候不方便(尤其是想练手的时候).闲着也是闲着,自己搭建一个Mysql数据库出来.以下操作,全部基于win10专业版 64位,仅供参 ...
- P2904 [USACO08MAR]跨河River Crossing
题目描述 Farmer John is herding his N cows (1 <= N <= 2,500) across the expanses of his farm when ...
- [转载]AVFormatContext结构体详细分析
AVFormatContext描述一个媒体文件或媒体流的构成和基本信息. 这是FFMpeg中最为基本的一个结构,是其他所有结构的根,是一个多媒体文件或流的根本抽象.其中nb_streams和s ...
- java核心技术-多线程之线程基础
说起线程,无法免俗首先要弄清楚的三个概念就是:进程.线程.协程.OK,那什么是进程,什么是线程,哪协程又是啥东西.进程:进程可以简单的理解为运行在操作系统中的程序,程序时静态代码,进程是动态运行着的代 ...
- SparkSQL执行时参数优化
近期接手了不少大数据表任务调度补数据的工作,补数时发现资源消耗异常的大且运行速度却不怎么给力. 发现根本原因在于sparkSQL配置有诸多问题,解决后总结出来就当抛砖引玉了. 具体现象 内存CPU比例 ...