标签:return puts Haybales Luogu && 干草堆 Bessie USACO15OPEN 垫高
首先找到Bessie位于哪两个干草堆之间,模拟Bessie跳的过程。两遍模拟,统计Bessie左、右干草堆垫高的高度。比如Bessie左边的干草堆需要垫高,她就要尽量向右跳,跳到右边无法跨越的位置为止。
如果当前左右两个干草堆Bessie都跳不出去,则无需垫高干草堆,输出0。
核心代码:
1 for(i=1;i<=n;++i) if (a[i].p>b) break; 2 l=i-1,r=i;d=a[r].p-a[l].p; 3 while(l>0&&r<=n) 4 { 5 if (a[l].s>=d&&a[r].s>=d) 6 {puts("0");return 0;} 7 if (a[r].s<d) 8 { 9 ++r; 10 d=a[r].p-a[l].p; 11 continue; 12 } 13 if (a[l].s<d) 14 { 15 ans=min(ans,d-a[l].s); 16 --l; 17 d=a[r].p-a[l].p; 18 } 19 } 20 l=i-1,r=i;d=a[r].p-a[l].p; 21 while(l>0&&r<=n) 22 { 23 if (a[l].s>=d&&a[r].s>=d) 24 {puts("0");return 0;} 25 if (a[l].s<d) 26 { 27 --l; 28 d=a[r].p-a[l].p; 29 continue; 30 } 31 if (a[r].s<d) 32 { 33 ans=min(ans,d-a[r].s); 34 ++r; 35 d=a[r].p-a[l].p; 36 } 37 }
注意当前统计答案的是Bessie左边的干草堆,要把判断右边干草堆是否能跳过的语句写在判断左边干草堆的前面,同时,在处理右边的语句结尾加上continue,保证跳到不能再跳。如果一直continue到出界,则无论这边如何加固,另一边还是可以跳出去,没有统计答案,ans仍为无穷大,最后输出-1。
标签:return,puts,Haybales,Luogu,&&,干草堆,Bessie,USACO15OPEN,垫高 来源: https://www.cnblogs.com/xzs123456/p/13497927.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。