BiliBili, ACFun… And More!【递归算法】
题源:http://acm.uestc.edu.cn/#/problem/show/3

题解:
题意:播放一段视频文件,有播放速度和缓冲速度两种,因为作者的癖好,播放前要缓冲几秒钟(这段时间不计算在总时间内),如果当播放文件大小等于缓冲文件大小时,缓冲文件还没有缓冲完,播放器会从头开始,但缓冲继续缓冲。
总结几个关键点:
1.当需要重新播放的时候,已经缓冲的大小(这里的性质等于开始播放前缓冲的大小),此时的情形类似最开始的情况,只是提前缓冲大小不一样了。
2.当播放大小等于缓冲大小(这里列一个方程),判断缓冲大小是否大于等于总大小,否则重新播放。
根据关键点的信息,可以嗅出递归算法的味道,什么是递归算法?
在数学中,递归是X0属于A集合,f(X0) = f(f(X1)),X0等于在X1对应的因变量。外层需要内层运算的结果
在编程中,递归是函数自己调用自己,但有一个递归出口。函数调用实际上是在“栈”中进行,最先调用的函数在栈底。
网上扣一张图能很形象理解递归(如有侵权立即删除)

回归正题:
设播放速度为X,缓冲速度为Y,提前播放的时间T,文件总大小Z,需要的时间t,重新播放前一刻的缓冲大小Size。
1.分两种情况。
1)网速倍儿棒,一次都没重新播放过
t = Z/X
满足条件:缓冲速度Y大于等于播放速度X 或者 当要重新播放的时候,缓冲大小大于总大小
Y >= X || T/(X - Y) >= S/X
2)令人抓狂的情况,老是重新播放
t = t1 + t2 + t3 ... + tn;
tn = Size/(X-Y);//第N次递归的播放时间
递归相同式子:缓冲文件大小Size,调用自身函数时,缓冲文件大小变为Size/(X-Y)*X;
递归终止条件:缓冲文件大小大于等于总文件大小S:size / (X - Y)*X >= S
附上代码:
//C code #include<stdio.h> #define M 1000 double Time(double size, int X, int Y, int S);//递归函数 int main()
{
int num,X[M],Y[M],S[M],T[M];//X playspeed播放速度,Y bufferspeed缓冲速度,S totalsize文件总大小
int i;//循环参数
scanf("%d", &num);//测试数目
for (i = 0; i < num; i++)
{
scanf("%d %d %d %d", &X[i], &Y[i],&T[i], &S[i]);
}
for (i = 0; i < num; i++)
{
if (X[i] <= Y[i] || T[i] / (double)(X[i] - Y[i]) >= S[i] / (double)X[i])//网速好
{
printf("Case #%d: %.3f\n", i+1, S[i] / (double)X[i]);
}
else//辣鸡网速
{
printf("Case #%d: %.3f\n", i + 1, Time(T[i] * Y[i], X[i], Y[i], S[i]));
}
}
return 0;
} double Time(double size,int X,int Y,int S)//size是重新播放前一刻的缓冲文件大小,作为递归变量
{
double t = 0;
if (size / (X - Y)*X < S)//递归终止条件
{
t = size / (X - Y) + Time(size / (X - Y)*X, X, Y, S);
}
else
{
t = S / (double)X;
}
return t;
}
有什么问题欢迎在留言区交流!
BiliBili, ACFun… And More!【递归算法】的更多相关文章
- cdoj 03 BiliBili, ACFun… And More! 水题
Article Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/3 Descr ...
- CDOJ 3 BiliBili, ACFun… And More! 模拟
原题链接:http://acm.uestc.edu.cn/#/problem/show/3 题意: 有个人在看B站视频时有个习惯,就是每当卡住的时候,他总再次从头开始看.另外,他在看视频时会先等待T的 ...
- UESTCOJ-BiliBili, ACFun… And More!(水题)
BiliBili, ACFun… And More! Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Ja ...
- github+hexo搭建自己的博客网站(二)更换主题yilia
开始更换主题,hexo默认的主题是landscape,可以更换为其他的主题yilia主题 详细的可以查看hexo博客的演示:saucxs.github.io 可以查看在github上生成的静态文件:h ...
- github pages + Hexo + 域名绑定搭建个人博客增强版
概述 前面我们用github pages + Hexo 搭建了一个简单版的个人博客系统,但是里面的内容单调,很多功能不够完善,所以我们需要对yelle 的主题进行优化和完善.基本搭建请访问:http: ...
- hexo-theme-yilia使用遇到的问题
该项目的github地址:https://github.com/litten/hexo-theme-yilia 下面是该项目的README.md 在使用过中遇到这么一个问题. 文章不会自动的摘要,显示 ...
- 一文解锁BILIBILI、ACFUN等弹幕网站是如何审核视频
欢迎访问网易云社区,了解更多网易技术产品运营经验. 人工审核对于A站和B站都是很重要的. AcFun稿件审核通行标准(V1.1) 表明,要审核的东西非常多,除了内容本身的合规性.调性,还有画质音质.撞 ...
- Python3.5爬虫统计AcFun所有视频,并按各个类别进行Top100排序展示
前(b)言(b): 前段时间对Python产生了浓厚的兴趣,所以决定入门学习了1个多月,后来某时我需要对tomcat做一个压力测试,于是我想到了用Python写一个压力测试的脚本吧!最后捣鼓出了一个脚 ...
- 递归算法经典实例小结(C#实现)
一 .递归算法简介 在数学与计算机科学中,递归是指在函数的定义中使用函数自身的方法. 递归算法是一种直接或者间接地调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往 ...
随机推荐
- Linux中如何克隆KVM虚拟机
转载:https://yq.aliyun.com/articles/64860 作者 digoal 日期 2016-11-11 标签 Linux , KVM , 虚拟化 , 克隆 背景 当需要批量部署 ...
- Java程序设计10——与运行环境交互
本部分介绍一些与运行环境相关的类 Sun为Java提供了丰富的基础类库,Java SE有三千多个基础类,要多敲代码,多练. 1.main()方法解析 如果一个程序总是按规定的流程运行,无需处理用户动作 ...
- DataStage 二、InfoSphere Information Server进程的启动和停止
DataStage序列文章 DataStage 一.安装 1 关于进程需要了解的基础知识 名称 说明 ASB代理进程 通信代理程序,它的作用是协助层与层之间的通信,默认端口是31531,它以后台进程的 ...
- centos7 安装mongo
1:创建仓库 vi /etc/yum.repos.d/mongodb-org-3.4.repo 2:把下面的内容复制到文件中 保存退出 [mongodb-org-3.4] name=MongoDB R ...
- 20155319 2016-2017-2 《Java程序设计》第七周学习总结
20155319 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 第十二章 Lambda 如果使用JDK8的话,可以使用Lambda特性去除重复的信息. 在只 ...
- MySQL性能调优与架构设计——第10章 MySQL数据库Schema设计的性能优化
第10章 MySQL Server性能优化 前言: 本章主要通过针对MySQL Server(mysqld)相关实现机制的分析,得到一些相应的优化建议.主要涉及MySQL的安装以及相关参数设置的优化, ...
- .NET基础 (11)类型的基类System.Object
类型的基类System.Object1 是否存在不继承自System.Object类型的类2 在System.Object中定义的三个比较方法有何异同3 如何重写GetHashCode方法 类型的基类 ...
- CString->char*.,char*->CString,char*->LPCTSTR
CString->char* CString strSource;//宣告CString char* charSource; //宣告char* 法1: charSource = (char*) ...
- B-spline Curves 学习之B样条曲线的移动控制点、修改节点分析(7)
B-spline Curves: Moving Control Points 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关的翻译学习 ...
- bootstrap-table简单使用
开发项目时总想着能不能有一款插件包含分页,查询等常用功能,后来发现了bootstrap-table 直接看代码和效果图 <!DOCTYPE html> <html lang=&quo ...