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

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只.最后有三群奶牛.

很水的题,= =但是还是1WA...

之前特傻逼的认为,可以分为 x=n/2+k/2 ,y=n/2-(k-k/2)

很显然没有考虑到n的奇偶性问题- - 我个傻逼这都没有想到

然后发现

x+y=n,x-y=k;

x=(n+k)/2;

所以每次递归 x,y=(n+k)/2-k;即可

当 n<=k,或是 (n+k)%2==1 的时候,返回

代码:

#include <cstdio>
#include <iostream>
using namespace std;
int n,k;
int solve(int n)
{
	if((n+k)%2 || n<=k)	return 1;
	int x;
	return solve(x=(n+k)/2)+solve(n-x);
}
int main() {
	freopen("raft.in","r",stdin);
	freopen("raft.out","w",stdout);
	cin>>n>>k;
	cout<< solve(n) << endl;
	return 0;
}
时间: 2024-10-29 03:42:06

[Usaco2008 Open]Roads Around The Farm分岔路口[水题]的相关文章

bzoj1621[Usaco2008 Open]Roads Around The Farm分岔路口*

bzoj1621[Usaco2008 Open]Roads Around The Farm分岔路口 题意: n头牛在路上走,每当它们走到岔路,如果这些牛可以分为数量相差刚好为k的两群,那么它们就会分成这样的两群往前走,否则就会停下来吃草.问最后有多少群在吃草.n≤10^9,k≤1000. 题解: 暴力模拟.(好像实际上不管有多少只牛只要经过3.4个岔路后就会无法再分并停下来吃草) 代码: 1 #include <cstdio> 2 int n,k,ans; 3 void dfs(int n,i

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

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

BZOJ 1621 [Usaco2008 Open]Roads Around The Farm分岔路口:分治 递归

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1621 题意: 约翰的N(1≤N≤1,000,000,000)只奶牛要出发去探索牧场四周的土地. 她们将沿着一条路走,一直走到三岔路口(可以认为所有的路口都是这样的). 这时候,这一群奶牛可能会分成两群,分别沿着接下来的两条路继续走. 如果她们再次走到三岔路口,那么仍有可能继续分裂成两群继续走. 奶牛的分裂方式十分古怪:如果这一群奶牛可以精确地分成两部分,这两部分的牛数恰好相差K(1≤K≤

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_

BZOJ-1305: [CQOI2009]dance跳舞(最大流 增加超级源汇+分裂点+二分 水题)

1305: [CQOI2009]dance跳舞 Time Limit: 5 Sec  Memory Limit: 162 MB Description 一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲.有一些男孩女孩相互喜欢,而其他相互不喜欢(不会“单向喜欢”).每个男孩最多只愿意和k个不喜欢的女孩跳舞,而每个女孩也最多只愿意和k个不喜欢的男孩跳舞.给出每对男孩女孩是否相互喜欢的信息,舞会最多能有几首舞曲? Inpu

bzoj1621 / P2907 [USACO08OPEN]农场周围的道路Roads Around The Farm

P2907 [USACO08OPEN]农场周围的道路Roads Around The Farm 基础dfs,按题意递归即可. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define re register 5 using namespace std; 6 int n,k,ans; 7 void dfs(int x){ 8 if(x<=k||((x-k)&1)){//不能有半

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

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

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

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