首页 > 其他分享 >丢手绢(尺取法/快慢指针)

丢手绢(尺取法/快慢指针)

时间:2024-12-25 19:41:59浏览次数:3  
标签:手绢 int 距离 弧长 取法 小朋友 dis 指针

题目 : 链接 :https://ac.nowcoder.com/acm/problem/207040

题意:

n个小朋友围成一个圈,给你这n个小朋友之间的距离,请你求出这些小朋友中隔得最远的两个之间的距离。(距离取 逆时针距离与顺时针距离的最小值)

思路:

可以将这些小朋友围成的圈看作一个圆,把小朋友看作一个一个圆弧上距离不等的点,那么 在理想情况下 两个不同点距离最远的一定是相隔弧长的一半的点
快指针结束条件就是划过的弧长超过了总弧长的一半,取 这个点与慢指针之间的距离,和上一个点与慢指针之间的距离的最大值便是答案
慢指针从第一个小朋友枚举到第n个小朋友

注意:

当快指针枚举到数组尾部n时,要把快指针重新指向数组头部,从而达成循环的效果

#include<bits/stdc++.h>
using namespace std;
int n;
int ans=-1;
const int maxn=1e5+5;
int dis[maxn];
signed main()
{
	ios::sync_with_stdio(false),cin.tie(0);
	cin>>n;
	int sum=0;
	for(int i=0;i<n;i++)
	{
		cin>>dis[i];
		sum+=dis[i];
	}
	
	int s=0,t=0;
	int l=0;
	int temp;
	for(;s<n;s++)
	{
		while(2*l<=sum)
		{
			l+=dis[t];
			temp=dis[t];
			t++;
			if(t==n)t=0;
		}
		
		ans=max(ans,min(sum-(l-temp),l-temp));
		ans=max(ans,min(sum-l,l));
		l-=dis[s];
	}
	cout<<ans;
	return 0;
}


标签:手绢,int,距离,弧长,取法,小朋友,dis,指针
From: https://www.cnblogs.com/benscode/p/18631298

相关文章

  • 【教学类-84-01】时钟动物——动物头像01(动物头像+钟表盘+活动扣+纸质指针)
    背景需求:制作手表后,发现上面的指针没法运动(表盘小,只能绘画指针)【教学类-82-01】20241209涂色手表制作1.0(表盘、表带)-CSDN博客文章浏览阅读798次,点赞26次,收藏22次。【教学类-82-01】20241209涂色手表制作1.0https://blog.csdn.net/reasonsummer/article/details/144250493【......
  • C++ 指针进阶:动态内存与复杂应用
    1.动态内存分配:new与delete运算符在C++编程中,动态内存分配是一项至关重要的技术,它允许我们在程序运行时根据实际需求分配和释放内存。new运算符用于在堆内存中分配内存,delete运算符则用于释放通过new分配的内存。当我们需要动态分配单个变量时,可以这样使用new:int*ptr......
  • C++ 指针基础:开启内存操控之门
    1.指针为何如此重要在C++编程领域,指针堪称一项极为关键的特性。它赋予了程序员直接访问和操控内存的能力,这使得程序在处理复杂数据结构与优化性能时具有更高的灵活性。想象一下,在编写大型程序时,高效地管理内存资源是多么重要,而指针就是实现这一目标的有力工具。例如,在处理......
  • 双指针
    @目录双指针基本介绍应用场景例题A-B数对排列排序总结双指针基本介绍双指针主要用于处理数组或链表等线性数据结构中的问题。它的基本思想是使用两个指针(通常是两个变量)来遍历或操作数据,这两个指针可以指向数组的开始和结束位置,也可以根据具体问题指向其他位置。双指针算法能够......
  • 指针, C语言的精髓
    指针,C语言的精髓 指针,C语言的精髓莫队先咕几天,容我先讲完树剖(因为后面树上的东西好多都要用树剖求LCA,树剖求LCA比倍增求LCA常数小).什么是指针保存变量地址的变量叫做指针.这是大概的定义,但是Defad认为这个定义不太好理解,所以我们先不看.我们的电......
  • C语言——void指针和空指针的区别
    面试题1、void指针    (1)格式:void*    (2)void指针就是指向任何类型的指针        (3)在编译的时候不会确定其指向的类型,是在程序中进行指向的    (4)这种类型的指针不能直接进行取内容或递增递减的操作,必须先转成别的类型的指针才可以执行,否则......
  • c语言指针
    指针指针=>内存地址指针变量=>存储着内存地址的变量定义格式:数据类型*变量名(数据类型要跟指向的数据类型保持一样)指针作用 1.查询数据  inta=10;  int*p=&a;  printf("%d\n",*p);2.存储数据/修改数据 *p=200; printf("%d",*p);3.参数传递4......
  • 【C语言】指针数组、数组指针、函数指针、指针函数、函数指针数组、回调函数
    【C语言】函数指针与指针函数文章目录@[TOC](文章目录)前言一、指针数组二、数组指针三、函数指针四、指针函数五、函数指针数组六、回调函数七、参考资料总结前言使用工具:1.DEVC++提示:以下是本篇文章正文内容,下面案例可供参考一、指针数组优先级关系:()>......
  • 教你学会自定义鼠标指针
    我现在用的一款很好看的指针如下图所示:是不是真的还挺不错的,还有更多可好玩的样式:只要先下载了这个软件,这些都是可以免费使用的,看腻了就换一个!下载过后操作这个就可以直接生效了,都不用重新启动的......
  • cpp智能指针
      普通指针的不足new和new[]的内存需要用delete和deletel]释放。程序员的主观失误,忘了或漏了释放。程序员也不确定何时释放。普通指针的释放类内的指针,在析构函数中释放。C++内置数据类型,如何释放?new出来的类,本身如何释放?C++11新增三个智能指针类型uniqu......