BZOJ_1621_[Usaco2008_Open]_Roads_Around_The_Farm_分岔路口(模拟+大水题)

描述



http://www.lydsy.com/JudgeOnline/problem.php?id=1621
\(n\)头奶牛,刚开始在一起,每次分成\(x\)和\(x+m\)两部分,直到不能再分,问最后一共有几部分.

分析



可以知道当前奶牛数\(n=x+x+m\),所以可以继续分的必要条件是\(n-m>=2\),然后dfs就好了...

对于大数据,\(m=1000\)和\(m=1\)并没有什么区别,所以可以认为搜索时候一直是二分的,所以有\(log_2^n\)层,最下面一层有\(2^{log_2^n}=n\)个,总共就是\(2n\),所以复杂度是\(O(n)\)的.

p.s.(都说了是大水题...)

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3
 4 int n,m;
 5 int dfs(int x){ return (x-m>=2&&(x-m)%2==0)?dfs((x-m)/2)+dfs((x+m)/2):1; }
 6 int main(){
 7     scanf("%d%d",&n,&m);
 8     printf("%d\n",dfs(n));
 9     return 0;
10 }

1621: [Usaco2008 Open]Roads Around The Farm分岔路口

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 735  Solved: 539
[Submit][Status][Discuss]

Description


翰的N(1≤N≤1,000,000,000)只奶牛要出发去探索牧场四周的土地.她们将沿着一条路走,一直走到三岔路口(可以认为所有的路口都是这样
的).这时候,这一群奶牛可能会分成两群,分别沿着接下来的两条路继续走.如果她们再次走到三岔路口,那么仍有可能继续分裂成两群继续走.    奶牛的
分裂方式十分古怪:如果这一群奶牛可以精确地分成两部分,这两部分的牛数恰好相差K(1≤K≤1000),那么在三岔路口牛群就会分裂.否则,牛群不会分
裂,她们都将在这里待下去,平静地吃草.    请计算,最终将会有多少群奶牛在平静地吃草.

Input

两个整数N和K.

Output

最后的牛群数.

Sample Input

6 2

INPUT DETAILS:

There are 6 cows and the difference in group sizes is 2.

Sample Output

3

OUTPUT DETAILS:

There are 3 final groups (with 2, 1, and 3 cows in them).

6
/ \
2 4
/ \
1 3

HINT

6只奶牛先分成2只和4只.4只奶牛又分成1只和3只.最后有三群奶牛.

Source

Silver

时间: 2024-10-29 00:23:26

BZOJ_1621_[Usaco2008_Open]_Roads_Around_The_Farm_分岔路口(模拟+大水题)的相关文章

[Usaco2008 Open]Roads Around The Farm分岔路口[水题]

Description 约翰的N(1≤N≤1,000,000,000)只奶牛要出发去探索牧场四周的土地.她们将沿着一条路走,一直走到三岔路口(可以认为所有的路口都是这样的).这时候,这一群奶牛可能会分成两群,分别沿着接下来的两条路继续走.如果她们再次走到三岔路口,那么仍有可能继续分裂成两群继续走.    奶牛的分裂方式十分古怪:如果这一群奶牛可以精确地分成两部分,这两部分的牛数恰好相差K(1≤K≤1000),那么在三岔路口牛群就会分裂.否则,牛群不会分裂,她们都将在这里待下去,平静地吃草.   

7-20 Windows消息队列 (25 分)(模拟水题)

题意: ? 思路: 用优先队列直接模拟就OK了,另外优先队列存pair的时候比较的是first的值,实测!! ? 上代码: 1 #include <iostream> 2 #include <queue> 3 #include <cstdio> 4 #include <algorithm> 5 #include <cmath> 6 #include <cstring> 7 #include <queue> 8 #inclu

《剑指offer》:[56]五岔路口交通管理红绿灯设计

抽象建模能力 计算机只是一种工具,是为我们服务所驱使的工具,我们不能一头扎入这个编程的海洋出不来甚至迷失了方向.它的作用是帮助我们解决实际生活中的问题.程序员的工作就是把各种现实的问题抽象成数学模型并用计算机的编程语言表达出来,所以我们应该培养自己从日常生活中抽取提炼出问题并建立相应的数学模型,找到问题的规律并解决问题的能力. 建模的第一步:从具体问题中抽象选择合适的数据结构来表述问题: 建模的第二步:分析模型的内在规律,设计一个解此数学模型的算法: 建模的第三步:编出程序,也就是用编程语言表达

51单片机GPIO口模拟串口通信

51单片机GPIO口模拟串口通信 标签: bytetimer终端存储 2011-08-03 11:06 6387人阅读 评论(2) 收藏 举报 本文章已收录于: 分类: 深入C语言(20) 作者同类文章X 1 #include "reg52.h" 2 #include "intrins.h" 3 #include "math.h" 4 #include "stdio.h" 5 sbit BT_SND =P1^5; 6 sbit

纪录片《岔路口》明年上映 揭示日本独立游戏业内幕(转)

我们看到很多报道中,欧美独立游戏业的伟大成就和快乐.那么在游戏之国的日本,又是怎样的景象?这里的独立游戏开发者们也是风调雨顺吗?他们对事业有着怎样的看法? 这是一部讲述日本独立游戏/同人游戏业的发展现状的纪录片,如果你想了解一下在日本作为一名独立游戏开发者,是怎样的体验的话,不妨关注一下这部名为<岔路口>的纪录片. 根 据本片导演安妮·费列罗的描述如下:“过去的几年里,日本游戏业已经意识到了独立游戏作者的影响力,以及其逐渐丰满的羽翼.2013年以来,东京电玩展也 是历史上首次开辟了独立游戏展示

MySQL审计五分彩盘口出租插件使用

解压文件:五分彩盘口出租[企鹅21717-93408] unzip audit-plugin-mysql-5.7-1.1.7-805-linux-x86_64.zip 将安装包libaudit_plugin.so文件复制到 plugin_dir目录:root@localhost 10:07: [(none)]>show global variables like 'plugin_dir';+---------------+------------------------------+| Vari

stm32 普通IO口模拟串口通信

普通IO口模拟串口通信 串口通信协议 串口传输 默认 波特率9600 1起始位 1停止位 其他0 数据位是8位(注意图上的给错了). 传输时,从起始位开始,从一个数据的低位(LSB)开始发送,如图从左向右的顺序,对电平拉高或拉低,最后停止位时拉高. 波特率大小,改变延时时间即可.例如9600 波特率    根据公式 : 1/9600=0.000104s(大致) 也就是说每发送1bit延时104us (下面我用9600波特率来说,代码用的是19200) 串口发送       将电平拉低 延时104

[补档]两个奇怪的大水题

导引 这是两道由OSU(貌似是一个我没有听说过的游戏)引申出的大水题(淼到不行啊喂),壹佰万行代码哦. T1 OSU! 题目 osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的01串.在这个串中连续的 X个1可以贡献X^3 的分数,这x个1不能被其他连续的1所包含(也就是极长的一串1,具体见样例解释) 现在给出n,以及每个操作的成功率,请你输出期望分数,输出四舍五

一道模拟赛题

一道模拟赛题 简要题意: 树,单点修改,求直径,求必须选\(x\)的最长链,卡空间. 分析: 我们先把必须选的那个丢掉,发现他实际上是单点修改\(inf\)然后查树的直径. 如果不卡空间的话我们可以用点分树来搞一搞,不过由于一次修改会影响到很多点不能用堆来维护只能用支持区间修改的线段树,这样空间就开不下了. 我们还有动态\(DP\). 对一条重链维护\(lx\)表示必须选上端点向下延伸的最长链,\(rx\)表示必须选下端点向上延伸的最长链,\(s\)表示点权和,\(mx\)表示这些点及他们轻儿子