竞赛
考级
【算法分析】 分析题目发现,可以进行递归。dfs(x)dfs(x)dfs(x) 里返回将 xxx 只牛分裂会有几群牛在平静地吃草。递归终止条件是当这群牛的数目小于等于 kkk,或者不能分裂成两堆时。 【参考代码】 【时间复杂度】 O(logn)O(logn)O(logn) 【预计得分】 100pts100pts100pts
AC君
你被骗了
༺ཌༀ元气满满ༀད༻
tijie题解
一只村民
#include<bits/stdc++.h> using namespace std; int n,k; int dfs(int x){ if(x<=k || (x-k)%2==1){ return 1; } return dfs((x-k)/2)+dfs((x+k)/2); } int main(){ cin>>n>>k; ```cppcout<<dfs(n); return 0; }
复仇者_元神启动
【算法分析】 由题意, ∵不断分群,∴用递归. 又∵“如果这一群奶牛可以精确地分成两部分,这两部分的牛数恰好相差K头,那么在三岔路口牛群就会分裂。否则,牛群不会分裂,她们都将在这里待下去,平静地吃草。 请计算,最终将会有多少群奶牛在平静地吃草。”. ∴结束条件为“n<=k||(n+k)%2”. 故本题核心代码(即递归函数)为: 【最终答案】: * 注:本题解仅供参考;独立思考,勿依赖题解。
135****6039
朱奕泽