【问题描述】

熊大妈的奶牛在时针的带领下,围成了一个圆圈跳舞。由于没有严格的教育,奶牛们之间的间隔不一致。

奶牛想知道两只最远的奶牛到底隔了多远。奶牛A到B的距离为A顺时针走和逆时针走,到达B的较短路程。告诉你相邻两个奶牛间的距离,请你告诉奶牛两只最远的奶牛

到底隔了多远。

【输入】

第一行一个整数N,表示有N只奶牛。(2≤N≤100000)

接下来2~N+1行,第I行有一个数,表示第I-1头奶牛顺时针到第I头奶牛的距离。(1≤距离≤maxlongint,距离和≤maxlongint)

第N+l行的数表示第N头奶牛顺时针到第1头奶牛的距离。

【输出】

一行,表示最大距离。

【样例】

Circle.in

5

1

2

3

4

5

Circle.out

7

【样例解析】

Circle.out所有奶牛I到J之间的距离和到达方式(顺为顺时针,逆为逆时针)如下:

I\J

1

2

3

4

5

1

O

1 (顺)

3(顺)

6(顺)

5(逆)

2

1(逆)

O

2(顺)

5(顺)

6(逆)

3

3(逆)

2(逆)

0

3(顺)

7(顺)

4

6(逆)

5(逆)

3(逆)

0

4(顺)

5

5(顺)

6(顺)

7(逆)

4(逆)

0

所以,最远的两头奶牛为3到5,距离是7。

话不多说,代码里有足够多的注解,可结合图例一起看。好了,上代码!

#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
/*1.枚举每一个点 直到找到一个大于圆的一半周长的点2.总长度减去刚找到的长度 进行比较大小(然后选小的) 3.求出每头奶牛与它相离最远奶牛的距离:求两头 1头顺时针最大的1头逆时针最大的
*/
int n;
int a[100010];
int c=0;//记录圆的周长
int ans=0;//记录答案
void init()
{freopen("circle.in","r",stdin);freopen("circle.out","w",stdout);scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a[i]);c+=a[i];}
}void work()
{int sum=0,k=0;//sum记录长度 实现注释1的运算 k记录注释1中找到的那个点(一定要重置为0!)for(int i=1;i<=n;i++){sum+=a[i-1];if(sum>c/2){k=i;break;}} int q=min(sum,abs(c-sum));//记录的是 该点应该选择的路(题上说走顺时逆时中最短的) int q1=min(sum-a[k-1],abs(c-(sum-a[k-1])));//该点记录的是点k的距离(同上)          ans=max(q1,q);//ans=max(ans,q1);//---------------------------------以上几步的实质为二分for(int i=1;i<=n;i++)//从第二头奶牛开始枚举 因为我们可以发现如果奶牛A的最大距离是到D 那么B的最大距离一定是从E开始枚举 {sum-=a[i-1];while(sum<=c/2)   {sum+=a[k+1];k++;}ans=max(ans,min(sum,abs(c-sum)));ans=max(ans,min(sum-a[k-1],abs(c-(sum-a[k-1]))));}printf("%d",ans);
}
int main()
{init();work();return 0;
}

奶牛专题1:圆圈舞蹈相关推荐

  1. 奶牛专题2:奶牛晒衣服

    [问题描述] 在熊大妈英明的带领下,时针和它的同伴生下了许多牛宝宝.熊大妈决定给每个宝宝都穿上可爱的婴儿装.于是,为牛宝宝洗晒衣服就成了很不爽的事情. 圣人王担负起了这个重任.洗完衣服后,你就要弄干衣 ...

  2. 洛谷——P2381 圆圆舞蹈

    P2381 圆圆舞蹈 题目描述 熊大妈的乃修在时针的带领下,围成了一个圆圈舞蹈,由于没有严格的教育,奶牛们之间的间隔不一致. 奶牛想知道两只最远的奶牛到底隔了多远.奶牛A到B的距离为A顺时针走和逆时针 ...

  3. 算法竞赛入门与进阶 (一)枚举

    枚举 1.关键点:不重复不遗漏 2.优化:把多余的操作去掉 例一: 在一个N*N(N<=100)矩阵中求一个最大的正方形使得该正方形的四个顶点都是有字符"#"构成.  #*# ...

  4. 弱鸡儿长乐爆零旅Day5

    T1圆圈舞蹈 [问题描述] 熊大妈的奶牛在时针的带领下,围成了一个圈跳舞.由于没有严格的教育,奶牛们之间的间隔不一致. 奶牛想知道两只最远的奶牛到底隔了多远.奶牛A到B的距离为A顺时针走和逆时针走,到 ...

  5. 跳舞(shuffle) 时限:1s 空间:256m

    先看看题目 农夫John在教他的奶牛跳一种舞蹈,每跳一次舞都要按给定的规则进行位置的变换.他首先把奶牛按一定的顺序排成一行,再按这种舞蹈的规则进行位置的变换,经过3次的位置变换后,会得到一个新的顺序. ...

  6. 解题报告:【kuangbin带你飞】专题四 最短路练习题

    目录 A. POJ - 2387 TiltheCowsComeHomeTil\ the\ Cows\ Come\ HomeTil the Cows Come Home--------(最短路模板题)[ ...

  7. $2019$ 暑期刷题记录 $2$(基本算法专题)

    $ 2019 $ 暑期刷题记录 $ 2 $ (基本算法专题) $ by~~wch $ $ BZOJ~1958~Strange~Towers~of~Hanoi $ (动态规划,递推) 题目大意: 求有 ...

  8. 【备战NOIP】专题复习1-动态规划-背包问题

    [备战NOIP]专题复习1-动态规划-背包问题 在阅读本文之前,建议先阅读背包九讲.本文通过相关的题目来讨论一些常见的背包套路,其中包括,01背包的模板以及应用,完全背包的模板以及应用,多重背包的模板 ...

  9. July 16th 模拟赛C T3 圆周舞蹈 Solution

    空降题目处 点我点我点我 Description: 熊大妈的奶牛在时针的带领下,围成了一个圆圈跳舞.由于没有严格的教育,奶牛们之间的间隔不一致. 奶牛想知道两只最远的奶牛到底隔了多远.奶牛A到奶牛B的 ...

最新文章

  1. 自动驾驶行业观察 | 停车不再难,L2到L4的泊车辅助系统技术剖析
  2. Android 数据库 ANR的例子
  3. ios设置tabbar背景颜色_WooCommerce微信小程序2.9.3版本发布 后台设置主题色 底栏装修定制...
  4. angularjs html编辑器,AngularJS集成wangeditor富文本编辑器
  5. sharepoint2013以其他用户身份登录
  6. php mvc多态实例,asp.net mvc-多态模型绑定
  7. 修改网站首页批处理_几个神奇的批处理,万事不求人!
  8. 一般处理程序(ashx)和页面处理程序(aspx)的区别
  9. 张文宏:知道很多网友批评我,但粥还是不能喝
  10. java jtextfield 输入_【java】JTextField与JComboBox结合动态匹配输入信息
  11. 显示器驱动程序已停止响应 并且已成功恢复
  12. 杨柳絮-Info:阜阳市多举措治理杨柳絮问题
  13. django2.2 简单博客 一
  14. 阿里云服务器登陆宝塔
  15. 数据中心机柜的选择与应用
  16. Stacks of Flapjacks UVA 薄饼排序问题
  17. BreakPoint Hex Workshop v6.7.3.5308 Incl Keyfilemaker and Patch-EMBRACE
  18. 傅老师课堂:TrieTree
  19. matlab loadlibrary 没有头文件,Matlab调用Loadlibrary问题
  20. android make编译 no rule to make xxx,need xxx

热门文章

  1. 巨博 2.2.0.300
  2. linux内核开启ssh,linux开启ssh服务
  3. 设置flash的背景为透明
  4. 云架构师进阶【企业SAP上云解决方案】 - 手把手教会您SAP在云端部署的规划设计
  5. 视频教程-跟着王进老师学开发之Python篇第一季:基础入门篇-Python
  6. 腾讯应用宝 认领应用 签名空包 流程 最详步骤解析
  7. java 泛型参数_Java泛型
  8. Linux系统Centos修改主机名
  9. 使用Xvfb实现无界面Selenium自动化测试注意事项
  10. ORACLE中的多表连接查询