当前位置: 首页 > news >正文

USACO08 OPEN Roads Around the Farm S (递归)

(我太垃了,得写点题解提升一下)

P2907 [USACO08OPEN] Roads Around The Farm S

题目描述

Farmer John 的奶牛对探索农场周围的领地产生了兴趣。最初,所有 $N$ 头奶牛($1 \leq N \leq 10^9$)以一个大群体的形式开始沿着一条道路旅行。当遇到岔路时,群体有时会选择分成两个较小的(非空)群体,每个群体沿着一条道路继续前进。当其中一个群体到达另一个岔路时,它可能会再次分裂,依此类推。

奶牛们设计了一种特殊的分裂方式:如果它们可以分裂成两个群体,使得群体的大小正好相差 $K$($1 \leq K \leq 1000$),那么它们就会以这种方式分裂;否则,它们就停止探索,开始安静地吃草。

假设总是会有新的岔路,计算最终安静吃草的奶牛群的数量。

输入格式

两个空格分隔的整数,$N$ 和 $K$。

输出格式

一个整数,表示安静吃草的奶牛群的数量。

输入输出样例 #1

输入 #1

6 2

输出 #1

3

说明/提示

有 $6$ 头奶牛,群体大小的差异是 $2$。

最终有 $3$ 个群体(分别有 $2$、$1$ 和 $3$ 头奶牛)。

  6/ \
2   4/ \1   3

(由 ChatGPT 4o 翻译)
就是一个比较简单的递归吧。。。
首先牛群的数量就是分成不同群体的次数再+1,就直接定义ans=1了
假设分出来的两个牛群中,数量较多的是x,数量较少的y
那么x=(n+k)/2, y=(n-k)/2
则 x-y=k,x+y=n
得到2x=n+k;
所以递归的终止条件就是n+k不是偶数了。不是偶数怎么分成两群牛呢???
还有,当x<=0或x>=n的时候递归也终止,怎么可能牛的数量小于0或一群牛的数量大于所有牛的数量呢?
对于y,这也是成立的,所以y<=0或y>=n也是终止条件
否则,ans++, 继续调用x和y
代码如下↓
#include<iostream> using namespace std; int n,k; int ans=1; void f(int n){ int x=(n+k)/2; int y=n-x; if((n+k)%2!=0) return ; else{ if(x<=0||x>=n) return; if(y<=0||y>=n) return ; ++ans; f(x); f(y); } } int main(){ cin>>n>>k; f(n); cout<<ans<<endl; return 0; }
就这样了。。。也就嘛嘛。。。
(最近在打音游,求键盘推荐。我用的迈从Ace60 蓝冰磁轴手感真的不戳儿~就是有点吵 啊喂)

http://www.wxhsa.cn/company.asp?id=2812

相关文章:

  • JavaScript生成随机数的方法
  • LiveOS 的制作简介
  • .gitignore 文件
  • 目标检测 | 基于Weiler–Atherton算法的IoU求解
  • 对比Java学习Go——函数、集合和OOP
  • MySQL集群高可用架构 - 指南
  • 【WRF-VPRM 预处理器】HEG 安装(服务器)-MRT专业的工具替代
  • 如何在Spring MVC中处理请求参数
  • redis实现缓存2-解决缓存穿透,缓存击穿
  • 单克隆抗体人源化:从鼠源缺陷到全人源突破,3 大阶段破解临床应用难题
  • 在Kubernetes中DaemonSet无法在master节点调度的问题
  • 9 12-
  • 桌面客户端的主要类型和技术方案
  • AGX Orin平台RTC驱动导致reboot系统卡住障碍调试
  • C 语言实现动态数组、链表、栈与队列
  • git reset
  • ICPC 2025 网络赛第一场 M
  • Brute It -TryHackMe
  • 题解:P12336 第三心脏
  • Spring篇知识点(1)
  • 在CentOS 7系统中彻底移除MongoDB数据库
  • 2025.9.13总结
  • 【数学建模】烟幕干扰弹投放策略优化:模型与算法整合框架 - 实践
  • 开源排名算法工具raink:利用LLM实现智能文档排序
  • lcjmSSL域名SSL证书免费申请
  • uniapp原生插件 TCP Socket 利用文档
  • 【PyQt5】实现输入延迟响应:3秒无输入后自动读取内容
  • 线性代数基础
  • 微积分基础
  • Windows 自带的SSH中配置X11