BZOJ_1621_[Usaco2008_Open]_Roads_Around_The_Farm_分岔路口(模拟+大水题)
2016-06-12 11:16
316 查看
描述
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.(都说了是大水题...)
#include <bits/stdc++.h> using namespace std; int n,m; int dfs(int x){ return (x-m>=2&&(x-m)%2==0)?dfs((x-m)/2)+dfs((x+m)/2):1; } int main(){ scanf("%d%d",&n,&m); printf("%d\n",dfs(n)); return 0; }View Code
1621: [Usaco2008 Open]Roads Around The Farm分岔路口
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 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 2INPUT DETAILS:
There are 6 cows and the difference in group sizes is 2.
Sample Output
3OUTPUT 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
相关文章推荐
- 降低网站的页面相似度的常用方法
- 深度学习中 --- 解决过拟合问题(dropout, batchnormalization)
- 嵌入式linux系统重新加载DNS配置
- 网站开发进阶(三十三)中文字符编码问题
- 网站开发进阶(三十三)中文字符编码问题
- Windows下搭建PHP环境:Apache+PHP+MySQL
- (十三)Linux基础之软件安装―yum、rpm
- 合理利用手机网站生成工具
- eclipse 发布web工程,修改tomcat端口
- 在Linux中增加swap空间
- zabbix
- 监控文件夹变动
- 怎样提高网站的访问速度的诀窍
- linux scp远程拷贝文件及文件夹
- pom.xml log4j配置
- Linux SSH远程文件/目录传输命令scp
- linux 内核官方文档
- 如何建立网站,建站规则
- 大型网站架构系列:缓存在分布式系统中的应用(二)
- Centos 6.5下KVM环境快速搭建