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

OJ 栓奶牛【C】【Python】【二分算法】

题目

算法思路

要求的距离在最近木桩与最远木桩相隔距离到零之间,所以是二分法

先取一个中间值,看按照这个中间值可以栓多少奶牛,再与输入奶牛数比较,如果大于等于,则增大距离,注意这里等于也是增大距离,因为要求的是最大距离,如果这个距离还能再大点呢,如果小于说明距离太大,缩小距离

C代码

//二分法
#include<stdio.h>
int main(){int n,k,p1;scanf("%d %d %d",&n,&k,&p1);int muzhuang[k+1];muzhuang[1]=p1;int i;for(i=2;i<=k;i++){muzhuang[i]=muzhuang[i-1]+((muzhuang[i-1]*2357+137)%10)+1;}int left,right,mid;left=0,right=k;int sum,t,ans;while(left<=right){mid=(left+right)/2;sum=1;t=1;for(i=2;i<=k;i++){if(muzhuang[i]-muzhuang[t]>=mid){t=i;sum++;}}//距离太小,如果等于,则要看看还能不能再大一点if(sum>=n){ans=mid;left=mid+1;}//距离太大else{right=mid-1;}}printf("%d",ans);return 0;
}

Python代码

n, k, p1 = map(int, input().split(' '))
lst = [p1]
for i in range(1, k):lst_i = lst[i - 1] + (lst[i - 1] * 2357 + 137) % 10 + 1lst.append(lst_i)  # 注意防止下标越界
left, right, ans = 0, k - 1, 0
while left <= right:mid = (left + right) // 2  # 注意python不会自动取整sum1, t = 1, 0for i in range(k):if lst[i] - lst[t] >= mid:t = isum1 += 1if sum1 >= n:ans = midleft = mid + 1else:right = mid - 1
print(ans)
http://www.lryc.cn/news/335565.html

相关文章:

  • Spring6-单元测试:JUnit
  • ubuntu系统安装k8s1.28精简步骤
  • 探讨Java和Go语言的缺点
  • 短剧在线搜索PHP网站源码
  • Python map遍历
  • 数据结构—红黑树
  • MES实施之工控机和电脑的选择
  • 京东云服务器4核8G主机租用价格418元一年,1899元3年
  • 【多模态融合】MetaBEV 解决传感器故障 3D检测、BEV分割任务
  • [通俗易懂]《动手学强化学习》学习笔记1-第1章 初探强化学习
  • centOS如何升级python
  • 【MYSQL锁】透彻地理解MYSQL锁
  • 【静态分析】静态分析笔记01 - Introduction
  • 使用的sql
  • 【ZZULIOJ】1052: 数列求和4(Java)
  • 【Linux】tcpdump P3 - 过滤和组织返回信息
  • vscode免费登录ssh ,linux git配置免密码
  • Netty 心跳(heartbeat)——服务源码剖析(上)(四十一)
  • C语言—每日选择题—Day65
  • 【环境变量】基本概念理解 | 查看环境变量echo | PATH的应用和修改
  • 5.7Python之元组
  • Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之一 简单视频放大抖动效果
  • 如何通过VPN访问内网?
  • RabbitMQ3.13.0起支持MQTT5.0协议及MQTT5.0特性功能列表
  • 常用脚本01 - 生成证书
  • 【jQuery】jQuery框架
  • 使用OMP复原一维信号(MATLAB)
  • Linux安装最新版Docker完整教程
  • iOS object-c self关键字总结
  • 京东云16核64G云服务器租用优惠价格500元1个月、5168元一年,35M带宽