CF735C 数论\平衡树叶子节点的最大深度\贪心\斐波那契\条件归一化
http://codeforces.com/problemset/problem/735/C
题意。。采用淘汰赛制。。只要打输就退出比赛。。而且只有两个选手打过的场数
相差不超过1才能比赛。。最后问你。。最多打几场比赛能决出冠军
那么这个题的做法是。。画图。。观察。。分析
Tip:首先我们观察未知量的形式。。它是一个复合函数的形式。。max(决出冠军的所有可能的比赛方式的场数)
那么我们首先要求括号最里面的东西。。即符合条件的所有可能的比赛方式的场数
那么我们可以画一画

我一开始为了保证比赛能正常进行。。不会像第一个图那样。。由于深度差太多无法比完所有选手。。因而无法决出冠军
所以两两比赛。。这样深度就有保证了。。但是回过头来。。是不是不符合题设最大的场数这个条件呢,这里我当时没法判断
由于我每次都把相邻的两两合并。。所以当然没有发现数量为8的时候。。最大可以为4场比赛
这个应该属于手玩数据的瑕疵?没什么经验。。
但是一旦你注意到了一个基础的事实。。冠军每次和比自己场数低的比能打得比和相同场数的选手多(有可能)。。因为同样都是增加一场比赛,和场数低的选手比
就能消耗更少的选手,那么你就可能需要更多的场次和剩余选手比赛。。
这个贪心策略我当时只是闪过一下。。因为我害怕这种策略无法满足完成比赛的条件。。而且一直没有找到这种策略能过的例子。。并且还有第一个例子挡在我的面前
所以我就放弃了。。题意都没有观察清楚。。
但其实如果你遵循这种策略造成了第一个例子最后剩一个没法比的情况。。那么你就不要和比自己场次低的比。。提升到相等即可符合条件过掉比赛
什么?你担心场次变化?多算几组?一样的好吧。。提升到相等的选手和它比场次不会增加也不会减少。。
那么知道了这个贪心策略之后。。我们可以计算答案了
观察可以得到这是一个斐波那契的结构。。
然后感觉有点迷糊。。
到底怎么统计答案啊
Tip:我们经过硬看之后。。发现图上的这个数字和连边操作的语义是。。生成一个比了某某场次的选手需要消耗多少名选手
那么我们消耗完所有的选手。。就能计算出最多能生成多少场次的选手。。根据这个过程我们用斐波那契去逼近
由于斐波那契的性质。。我们可以知道斐波那契数列可以非常快地收敛于参赛选手的数量
所以当我们分清了图上的过程和语义之后以及有了和谐不能完成比赛的策略和贪心的策略我们就能用ll,快速地统计答案
代码如下
#include <iostream>
#include <cstdio> using namespace std;
typedef long long ll;
ll n;
ll f[];
int main(){
scanf("%I64d",&n);
f[]=;f[]=*f[];
int i;
for(i=;i<=;++i){
f[i]=f[i-]+f[i-];
if(f[i]>=n) break;
}
if(f[i]>n) i--;
printf("%d\n",i);
return ;
}
由于深度相差小于等于1的节点才能合并。。那么我们就能把它看成是一颗平衡树。。那么题设就是在求这个平衡树的叶子节点的最大深度
CF735C 数论\平衡树叶子节点的最大深度\贪心\斐波那契\条件归一化的更多相关文章
- 2018.10.08 NOIP模拟 斐波那契(贪心+hash/map)
传送门 签到题. 显然是可以贪心分组的,也就是尽量跟当前的分成一组. 这时我们需要判断a[l]+a[r],a[l+1]+a[r]...a[r−1]+a[r]a[l]+a[r],a[l+1]+a[r]. ...
- ACM/ICPC 之 数论-斐波拉契●卢卡斯数列(HNNUOJ 11589)
看到这个标题,貌似很高大上的样子= =,其实这个也是大家熟悉的东西,先给大家科普一下斐波拉契数列. 斐波拉契数列 又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.… ...
- 【斐波拉契+数论+同余】【ZOJ3707】Calculate Prime S
题目大意: S[n] 表示 集合{1,2,3,4,5.......n} 不存在连续元素的子集个数 Prime S 表示S[n]与之前的所有S[i]互质; 问 找到大于第K个PrimeS 能整除X 的第 ...
- ***1133. Fibonacci Sequence(斐波那契数列,二分,数论)
1133. Fibonacci Sequence Time limit: 1.0 secondMemory limit: 64 MB is an infinite sequence of intege ...
- 数论+矩阵快速幂|斐波那契|2014年蓝桥杯A组9-fishers
标题:斐波那契 斐波那契数列大家都非常熟悉.它的定义是: f(x) = 1 .... (x=1,2) f(x) = f(x-1) + f(x-2) .... (x>2) 对于给定的整数 n 和 ...
- 2018年东北农业大学春季校赛 K wyh的数列【数论/斐波那契数列大数取模/循环节】
链接:https://www.nowcoder.com/acm/contest/93/K来源:牛客网 题目描述 wyh学长特别喜欢斐波那契数列,F(0)=0,F(1)=1,F(n)=F(n-1)+F( ...
- 求二叉树的深度,从根节点到叶子节点的最大值,以及最大路径(python代码实现)
首先定义一个节点类,包含三个成员变量,分别是节点值,左指针,右指针,如下代码所示: class Node(object): def __init__(self, value): self.value ...
- Java 用自带dom解析器遍历叶子节点内容
一.XML文件config.xml,内容如下: <?xml version="1.0" encoding="UTF-8" standalone=" ...
- jquery zTree 查找所有的叶子节点
jquery zTree 查找所有的叶子节点 // 保存所有叶子节点 10 为初始化大小,并非数组上限 var arrayObj = new Array([10]); /* treeNode: 根节点 ...
随机推荐
- Qt字符转换
1.QString -> char* #include<QTextCodec> QTextCodec::setCodecForLocale(QTextCodec::codecFor ...
- win8内置管理员用户无法激活此应用
在运行中输入:“gpedit.msc”,就会启动组策略编辑器, 计算机配置 --> Windows设置 --> 安全设置 --> 本地策略 --> 安全选项 :::: 用 ...
- 9.nodejs权威指南--Socket.IO
1. Socket.IO 1.1 服务器 var http = require('http'); var sio = require('socket.io'); var fs = require('f ...
- 23. javacript高级程序设计-数据存储
1. 数据存储 1.1 cookie HTTP Cookie, cookie,最初用来在客户端存储回话信息. (1). 限制,不同浏览器对特定域名下的cookie 的个数有限制,每个域名下最好不要操过 ...
- Xcode 6.3.2 提交APP(Upload Archive)时崩溃的解决办法
最近在上传为客户做的APP时,发现Xcode总会在进行到Upload Archive这一步时崩溃,导致APP上载不了.下面说说网上搜索到的几种解决办法. 方法一 亲测有效,很简单: 1.重新打开Xco ...
- Centos 用户登录失败N次后锁定用户禁止登陆
针对linux上的用户,如果用户连续3次登录失败,就锁定该用户,几分钟后该用户再自动解锁 Linux有一个pam_tally2.so的PAM模块,来限定用户的登录失败次数,如果次数达到设置的阈值,则锁 ...
- Mysql 基础 高级查询
在西面内容中 car 和 nation 都表示 表名 1.无论 高级查询还是简单查询 都用 select.. from..语句 from 后面 加表名 可以使一张表也可以是 ...
- 【leetcode】Max Points on a Line(hard)☆
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line. ...
- yum Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
今天使用yum时出现如上问题,解决办法: 1.编辑:/etc/yum.repos.d/epel.repo 将baseurl的注释取消, mirrorlist注释掉,如图:
- IOS- 堆和栈 详解
Objective-C的对象在内存中是以堆的方式分配空间的,并且堆内存是由你释放的,即release 栈由编译器管理自动释放的,在方法中(函数体)定义的变量通常是在栈内,因此如果你的变量要跨函数的话就 ...