首页 技术 正文
技术 2022年11月15日
0 收藏 841 点赞 5,046 浏览 824 个字

问题描述  JiaoShou在爱琳大陆的旅行完毕,即将回家,为了纪念这次旅行,他决定带回一些礼物给好朋友。
  在走出了怪物森林以后,JiaoShou看到了排成一排的N个石子。
  这些石子很漂亮,JiaoShou决定以此为礼物。
  但是这N个石子被施加了一种特殊的魔法。
  如果要取走石子,必须按照以下的规则去取。
  每次必须取连续的2*K个石子,并且满足前K个石子的重量和小于等于S,后K个石子的重量和小于等于S。
  由于时间紧迫,Jiaoshou只能取一次。
  现在JiaoShou找到了聪明的你,问他最多可以带走多少个石子 思路:先求出前缀和,然后再二分查找k,判断当前的k是否满足条件,满足的话k的值增加再判断,如果不满足的话,k的值减少再判断。最后输出满足的点就是最大值。AC代码:

 1 #include<bits/stdc++.h>
2 using namespace std;
3 typedef long long ll;
4 const int Max=1000003;
5 const int mod=10007;
6 ll sum[Max];
7 int n;
8 ll s;
9 int kk(int k)
10 {
11 for(int i=k; i<=n&&i+k<=n; i++)
12 if(sum[i]-sum[i-k]<=s&&sum[i+k]-sum[i]<=s)return 1;
13 return 0;
14 }
15 int main()
16 {
17
18 cin>>n>>s;
19 for(int i=1; i<=n; i++)
20 {
21 ll a;
22 cin>>a;
23 sum[i]=sum[i-1]+a;
24 }
25 int k=0;
26 int l,r;
27 l=1;
28 r=n/2;
29 while(l<=r)
30 {
31 int mid=(l+r)/2;
32 if(kk(mid))
33 {
34 l=mid+1;
35 k=mid;
36 }
37 else r=mid-1;
38 }
39 cout<<k*2;
40 }
41 /*
42 5 1
43 1 1 1 1 1
44 */
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,994
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,507
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,350
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,135
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,768
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,845