奶牛专题1:圆圈舞蹈
【问题描述】
熊大妈的奶牛在时针的带领下,围成了一个圆圈跳舞。由于没有严格的教育,奶牛们之间的间隔不一致。
奶牛想知道两只最远的奶牛到底隔了多远。奶牛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:圆圈舞蹈相关推荐
- 奶牛专题2:奶牛晒衣服
[问题描述] 在熊大妈英明的带领下,时针和它的同伴生下了许多牛宝宝.熊大妈决定给每个宝宝都穿上可爱的婴儿装.于是,为牛宝宝洗晒衣服就成了很不爽的事情. 圣人王担负起了这个重任.洗完衣服后,你就要弄干衣 ...
- 洛谷——P2381 圆圆舞蹈
P2381 圆圆舞蹈 题目描述 熊大妈的乃修在时针的带领下,围成了一个圆圈舞蹈,由于没有严格的教育,奶牛们之间的间隔不一致. 奶牛想知道两只最远的奶牛到底隔了多远.奶牛A到B的距离为A顺时针走和逆时针 ...
- 算法竞赛入门与进阶 (一)枚举
枚举 1.关键点:不重复不遗漏 2.优化:把多余的操作去掉 例一: 在一个N*N(N<=100)矩阵中求一个最大的正方形使得该正方形的四个顶点都是有字符"#"构成. #*# ...
- 弱鸡儿长乐爆零旅Day5
T1圆圈舞蹈 [问题描述] 熊大妈的奶牛在时针的带领下,围成了一个圈跳舞.由于没有严格的教育,奶牛们之间的间隔不一致. 奶牛想知道两只最远的奶牛到底隔了多远.奶牛A到B的距离为A顺时针走和逆时针走,到 ...
- 跳舞(shuffle) 时限:1s 空间:256m
先看看题目 农夫John在教他的奶牛跳一种舞蹈,每跳一次舞都要按给定的规则进行位置的变换.他首先把奶牛按一定的顺序排成一行,再按这种舞蹈的规则进行位置的变换,经过3次的位置变换后,会得到一个新的顺序. ...
- 解题报告:【kuangbin带你飞】专题四 最短路练习题
目录 A. POJ - 2387 TiltheCowsComeHomeTil\ the\ Cows\ Come\ HomeTil the Cows Come Home--------(最短路模板题)[ ...
- $2019$ 暑期刷题记录 $2$(基本算法专题)
$ 2019 $ 暑期刷题记录 $ 2 $ (基本算法专题) $ by~~wch $ $ BZOJ~1958~Strange~Towers~of~Hanoi $ (动态规划,递推) 题目大意: 求有 ...
- 【备战NOIP】专题复习1-动态规划-背包问题
[备战NOIP]专题复习1-动态规划-背包问题 在阅读本文之前,建议先阅读背包九讲.本文通过相关的题目来讨论一些常见的背包套路,其中包括,01背包的模板以及应用,完全背包的模板以及应用,多重背包的模板 ...
- July 16th 模拟赛C T3 圆周舞蹈 Solution
空降题目处 点我点我点我 Description: 熊大妈的奶牛在时针的带领下,围成了一个圆圈跳舞.由于没有严格的教育,奶牛们之间的间隔不一致. 奶牛想知道两只最远的奶牛到底隔了多远.奶牛A到奶牛B的 ...
最新文章
- 自动驾驶行业观察 | 停车不再难,L2到L4的泊车辅助系统技术剖析
- Android 数据库 ANR的例子
- ios设置tabbar背景颜色_WooCommerce微信小程序2.9.3版本发布 后台设置主题色 底栏装修定制...
- angularjs html编辑器,AngularJS集成wangeditor富文本编辑器
- sharepoint2013以其他用户身份登录
- php mvc多态实例,asp.net mvc-多态模型绑定
- 修改网站首页批处理_几个神奇的批处理,万事不求人!
- 一般处理程序(ashx)和页面处理程序(aspx)的区别
- 张文宏:知道很多网友批评我,但粥还是不能喝
- java jtextfield 输入_【java】JTextField与JComboBox结合动态匹配输入信息
- 显示器驱动程序已停止响应 并且已成功恢复
- 杨柳絮-Info:阜阳市多举措治理杨柳絮问题
- django2.2 简单博客 一
- 阿里云服务器登陆宝塔
- 数据中心机柜的选择与应用
- Stacks of Flapjacks UVA 薄饼排序问题
- BreakPoint Hex Workshop v6.7.3.5308 Incl Keyfilemaker and Patch-EMBRACE
- 傅老师课堂:TrieTree
- matlab loadlibrary 没有头文件,Matlab调用Loadlibrary问题
- android make编译 no rule to make xxx,need xxx